using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace
ConsoleApplication4
{
class Program
{
static int total = 0;//Variable which counts the number of possible arrangements.
static void Main(string[] args)
{
int num = 8;
int[,] board = new int[num,num];
for(int i = 0; i < num; i++)
{
for(int j = 0; j < num; j++)
{
board[i, j] = 0;
}
}
queens(board, num, 0, 0, 0);
Console.WriteLine("The number of possible arrangements is: " + total);
}
static void queens(int[,] board, int num, int count, int row, int j)
{
if(count == num)
{
total++;
return;
}
if(j >= num && row >= num)
{
return;
}
else
{
j = 0;
while(j < num && row < num)
{
if(board[row, j] == 0)
{
int[,] prev = new int[num, num];
for (int m = 0; m < board.GetLength(0); m++)
{
for (int n = 0; n < board.GetLength(1); n++)
{
prev[m, n] = board[m, n];
}
}
board[row, j] = 1;
count++;
//Function to mark the squares where a queen cannot be placed.
queenplace(board, row, j);
queens(board, num, count, row + 1, j);
//Copying the board conditions of the previous call on returning.
for (int m = 0; m < num; m++)
{
for (int n = 0; n < num; n++)
{
board[m, n] = prev[m, n];
}
}
count--;
j++;
}
else
{
j++;
}
}
}
}
static void queenplace(int[,] board, int row, int j)
{
//Marking all squares of the row.
for(int i = 0; i < board.GetLength(1); i++)
{
board[row, i] = 1;
}
//Marking all squares of the column.
for(int i = 0; i < board.GetLength(0); i++)
{
board[i, j] = 1;
}
int rowpoint=row;
int colpoint=j;
//Marking the diagonal downwards towards the left.
while(colpoint >= 0 && rowpoint < board.GetLength(0))
{
board[rowpoint, colpoint] = 1;
rowpoint++;
colpoint--;
}
rowpoint = row;
colpoint = j;
//Marking the diagonal downwards towards the right.
while(colpoint < board.GetLength(1) && rowpoint < board.GetLength(0))
{
board[rowpoint, colpoint] = 1;
rowpoint++;
colpoint++;
}
}
}
}
A blog on programming and software design interview problems and solutions. Also there are some application development related stuff.
Pages
Saturday, July 17, 2010
Program to solve N-queens problem by back-tracking
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment