#include "stdio.h"
#include "math.h"
/////////////////////////////////Check函数功能:检验第n行的皇后是否和之前的皇后有冲突,没有的话返回1
int Check(int a[],int n)
{
for(int i=1;i<n;i++)
{
if(abs(a[i]-a[n])==abs(i-n) || a[i]==a[n])//////////////见下面注释
return 0;
}
return 1;
}
int a[20],n,i,t=1;////////////////////////////////////////全局变量
void Try(int i)
{
int j,k;
for(j=1;j<=n;j++)
{
a[i]=j;
if(Check(a,i))///////////////////////////////////////如果第j列不会与之前的皇后冲突
{
if(i<n)//////////////////////////////////////////如果i<n,即还没有找到八个皇后,继续递归
Try(i+1);
else ////////////////////////////////////////////如果找到了一组解就输出
{
printf("第%d种解法:
",t++);
for(k=1;k<=n;k++)
printf("第%d个皇后:%d
",k,a[k]);
printf("
");
} } } }
int main()
{
printf("几皇后?n=");
scanf("%d",&n);
Try(1);
return 0;
}
八皇后之回溯法解决