```
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace NQueen
{
class Program
{
const int N = 8;
static void Main(string[] args)
{
int count = 0;
int[,] board = new int[N, N];
//Initialize the board array to 0
for (int i = 0; i < N; i++)
{
for (int j = 0; j < N; j++)
{
board[i, j] = 0;
}
}
//Initialize the pointer array
int[] pointer = new int[N];
for (int i = 0; i < N; i++)
{
pointer[i] = -1;
}
//Implementation of Back Tracking Algorithm
for (int j = 0; ; )
{
pointer[j]++;
//Reset and move one column back
if (pointer[j] == N)
{
board[pointer[j] - 1, j] = 0;
pointer[j] = -1;
j--;
if (j == -1)
{
Console.WriteLine("All possible configurations have been examined...");
break;
}
}
else
{
board[pointer[j], j] = 1;
if (pointer[j] != 0)
{
board[pointer[j] - 1, j] = 0;
}
if (SolutionCheck(board))
{
j++;//move to next column
if (j == N)
{
j--;
count++;
Console.WriteLine("Solution" + count.ToString() + ":");
for (int p = 0; p < N; p++)
{
for (int q = 0; q < N; q++)
{
Console.Write(board[p, q] + " ");
}
Console.WriteLine();
}
}
}
}
}
}
public static bool SolutionCheck(int[,] board)
{
//Row check
for (int i = 0; i < N; i++)
{
int sum = 0;
for (int j = 0; j < N; j++)
{
sum = sum + board[i, j];
}
if (sum > 1)
{
return false;
}
}
//Main diagonal check
//above
for (int i = 0, j = N - 2; j >= 0; j--)
{
int sum = 0;
for (int p = i, q = j; q < N; p++, q++)
{
sum = sum + board[p, q];
}
if (sum > 1)
{
return false;
}
}
//below
for (int i = 1, j = 0; i < N - 1; i++)
{
int sum = 0;
for (int p = i, q = j; p < N; p++, q++)
{
sum = sum + board[p, q];
}
if (sum > 1)
{
return false;
}
}
//Minor diagonal check
//above
for (int i = 0, j = 1; j < N; j++)
{
int sum = 0;
for (int p = i, q = j; q >= 0; p++, q--)
{
sum = sum + board[p, q];
}
if (sum > 1)
{
return false;
}
}
//below
for (int i = 1, j = N - 1; i < N - 1; i++)
{
int sum = 0;
for (int p = i, q = j; p < N; p++, q--)
{
sum = sum + board[p, q];
}
if (sum > 1)
{
return false;
}
}
return true;
}
}
}
```

Advertisements

Hay have you solved this problem using Hill climbing random restart ?

No, it’s not hill climbing algorithm.

Hi there, this is e very nice solution, i would like to see other comments on the code above, can you put more comments in the code please

Any specific section of code you need more clarity?

Thank you man, that really helped.

Hi, very nice solution, great job

Hi,

can u explain why did u used the Pointers array??

use*

Pointer array basically stores the position of queen within a column. For example the value of pointer[j] denotes the row number where the queen is placed in jth column.

Hi. Thanks for post.

Could you explain why did you use major and minor diagonal check? I can not understand..

The reason being, you can’t have two or more queens cutting each other across the diagonal paths.