using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace nQueenDi1ci
{
class NQueen
{
private int n; //皇后的个数
int[] x; //当前解
long sum; //可行方案个数
public long nQueen(int nn)
{
this.n = nn;
sum = 0;
x = new int[n + 1];
for (int i = 0; i < n + 1; i++)
{
x[i] = 0; //首先初始化
}
BackTrack(1);
return sum;
}
public bool IsSuitablePlace(int k)
{
for (int j = 1; j < k; j++)
{
if ((Math.Abs(k - j) == Math.Abs(x[j] - x[k]))
|| (x[j] == x[k]))
{
return false;
}
}
return true;
}
public void BackTrack(int t)
{
if (t > n)
{
sum++;
}
else
{
for (int i = 1; i < n + 1; i++)
{
x[t] = i;
if (IsSuitablePlace(t) == true)
{
BackTrack(t + 1);
}
}
}
}
public long GetSum()
{
return sum;
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace nQueenDi1ci
{
class Program
{
static void Main(string[] args)
{
NQueen q = new NQueen();
q.nQueen(4);
Console.WriteLine(q.GetSum());
Console.Read();
}
}
}