using System;
namespace N皇后问题
{
class Program
{
public static readonly int N = 6; //皇后个数
public static int[] X = new int[N]; //X[i]表示第i个皇后放在第i行的X[i]列
public static int Count = 0; //解的个数
static void Main(string[] args)
{
Console.WriteLine("皇后个数为:" + N);
Nqueens(0);
Console.WriteLine("答案个数为:" + Count);
Console.ReadKey();
}
static void Nqueens(int t)
{
if (t >= N) //表示已经得到一个解
{
Count++;
for (int i = 0; i < N; i++)
Console.Write((X[i] + 1) + " ");
Console.WriteLine();
}
else
{
for (int i = 0; i < N; i++) //判断第t个皇后能否放置 若能则递归调用下一个皇后的放置问题
{
X[t] = i;
if (Place(t))
Nqueens(t + 1);
}
}
}
/// <summary>
/// 判断第t个皇后能否放置
/// </summary>
/// <param name="t"></param>
/// <returns></returns>
static bool Place(int t)
{
for (int i = 0; i < t; i++)
if (X[t] == X[i] || t - i == Math.Abs(X[t] - X[i])) //判断列和对角线是否与前t-1个皇后冲突
return false;
return true;
}
}
}
回溯-N皇后
最新推荐文章于 2022-03-26 16:01:14 发布