八皇后問題是一個古老而著名的問題,是回溯演算法的典型例題。該問題是十九世紀著名的數學家高斯1850年提出:在8X8格的國際象棋上擺放八個皇后,使其不能互相攻擊,即任意兩個皇后都不能處於同一行、同一列或同一斜線上,問有多少種擺法。
using System;
using System.Collections.Generic;
using System.Diagnostics;
public class MyClass
{
static int[] site=new int[8];
static int queenNum=8;
static int count=0; //解法數
public static void Main()
{
//WL();
Queen(0);
RL();
}
public static void Queen(int n)
{
if(queenNum==n)
{
WL("第{0}種解法",++count);
for(int i=0;i<queenNum;i++)
{
WL("{0},",site[i]);
}
WL("------------------------------------");
return;
}
else
{
for(int i=0;i<queenNum;i++)
{
site[n]=i;
if(IsOk(n))
Queen(n+1);
}
}
}
public static bool IsOk(int n)
{
for(int i=0;i<n;i++)
{
if(site[i]==site[n])
return false;
if(Math.Abs(site[i]-site[n])==n-i)
return false;
}
return true;
}
Helper methods#region Helper methods
private static void WL(object text, params object[] args)
{
Console.WriteLine(text.ToString(), args);
}
private static void RL()
{
Console.ReadLine();
}
private static void Break()
{
System.Diagnostics.Debugger.Break();
}
#endregion
}