N皇后

来源:互联网 发布:怎么获取数组的长度 编辑:程序博客网 时间:2024/05/22 03:10



#include<stdio.h>

#include<stdlib.h>
#include<string.h>
int n,map[11],num;//,num为全局变量,记录每一次深搜的可行解得数目,不要忘了一开始为0哦!
void dfs(int k)//深搜传递的是行数,就是第几行
{
int i,j,flag;
if(k==n+1)//
{
num++;
return ;
}
for(i=1;i<=n;i++)//列
{
map[k]=i;//map[i]标记所探索的第k行的列坐标
flag=1;
for(j=1;j<k;j++)//看看第k行之前的行的列数map【i]是否和第k行的列数相等,是否在同一斜线上
{
if(map[j]==i||j+map[j]==i+k||map[j]-j==i-k)//在同一斜线上不?
{
flag=0;//不符合,就让flag标记他,为排除他做准备
break;
}
}
if(flag)
   dfs(k+1);//符合,继续深搜下一行应该在哪一列
}
}
int main()
{
int ans[11];
for(n=1;n<=10;n++)
{
num=0;
dfs(1);
ans[n]=num;
}
while(~scanf("%d",&n)&&n)
{
printf("%d\n",ans[n]);
}
return 0;
}

1 0
原创粉丝点击