#include<stdio.h>
#include<stdlib.h>
int n,stack[100]; //存放的是路径
int total; //路径的总数目
int att(int l,int i);
void make(int l)
{ int i;
if(l==n+1){
total=total+1;
for(i=1;i<=n;i++)
printf("%-3d",stack[i]);
printf("\n");
} for (i=1;i<=n;i++)
{
stack[l]=i; //每一行或列只对应唯一一个确定的i值
if(!att(l,i))
make(l+1);
}
}
int att(int l,int i)
{
int k;
for(k=1;k<l;k++)
if(abs(l-k)==abs(stack[k]-i)||i==stack[k])
return 1; //这是不允许的情况,返回值为1
return 0;
}
int main()
{
printf("输入皇后个数:\n");
scanf("%d",&n);
total=0;
make(1);
printf("%d\n",total);
return 0;
}
n皇后问题(深搜DFS)
最新推荐文章于 2022-01-30 22:41:50 发布