using System.Collections.Generic;
public static void Main()
var chessBoard = new ChessBoard();
var queenSetResolver = new QueensSetResolver(chessBoard);
if (queenSetResolver.SetQueens())
Console.WriteLine("Result found:");
chessBoard.DisplayBoard();
Console.WriteLine("We don't have any result!");
public class ChessBoard {
public void DisplayBoard()
for(int i = 0; i <= Board.GetUpperBound(0); i++)
for(int j = 0; j <= Board.GetUpperBound(0); j++)
Console.Write(Board[i,j]);
public IEnumerable<int> GetRow(int row)
for (int i = 0; i <= Board.GetUpperBound(1); ++i)
yield return Board[row, i];
public IEnumerable<int> GetColumn(int column)
for (int i = 0; i <= Board.GetUpperBound(0); ++i)
yield return Board[i, column];
public IEnumerable<int> GetDiagonals(int row, int column)
for (int i = 0; i <= Board.GetUpperBound(0); i++)
for (int j = 0; j <= Board.GetUpperBound(1); j++)
if (Math.Abs(row - i) == Math.Abs(column - j))
yield return Board[i, j];
public class QueensSetResolver {
private ChessBoard _chessBoard;
public QueensSetResolver(ChessBoard chessBoard) {
_chessBoard = chessBoard;
bool IsValidStep(int row, int column)
if (_chessBoard.GetRow(row).Cast<int>().Sum() > 0)
if (_chessBoard.GetColumn(column).Cast<int>().Sum() > 0)
if (_chessBoard.GetDiagonals(row, column).Cast<int>().Sum() > 0)
return _chessBoard.Board.Cast<int>().Sum() == 8;
public bool SetQueens(int currentRow = 0, int currentColumn = 0)
int startRow = currentRow;
int startColumn = currentColumn;
for (int i = startRow; i <= _chessBoard.Board.GetUpperBound(0); i++)
for (int j = startColumn; j <= _chessBoard.Board.GetUpperBound(1); j++)
if (_chessBoard.Board[i, j] == 0)
_chessBoard.Board[i, j] = 1;
_chessBoard.Board[currentRow, currentColumn] = 0;