您的位置:首页 > 其它

hdu 2553 N皇后问题

2017-08-26 16:30 176 查看
原题传送门:http://acm.hdu.edu.cn/showproblem.php?pid=2553

N皇后 由八皇后问题演变而来 据说当年高斯先生用人力算八皇后问题 没错 就是那个小学二年级发明等差数列求和公式的高斯 强如高斯 当初在算这个问题的时候也没有得到正确答案 还好今天我们有计算机 

经典dfs问题 由于递归实现dfs比较慢 为了防止超时 可以提前打表

下面是AC代码

#include<stdio.h>
#include<string.h>

int n,count;

int flag[11],map[11],ans[11];

int abs(int m)
{
if(m<0)
return -m;
return m;
}

void dfs(int h)
{
int i,j,t;
if(h>n)
{
count+=1;
return;
}
for(i=1;i<=n;i++)
{
if(!flag[i])
{
map[h]=i;
t=1;
for(j=1;j<=h-1;j++)
{
if(abs(map[h]-map[j])==h-j)
{
t=0;
break;
}
}
if(t)
{
flag[i]=1;
dfs(h+1);
flag[i]=0;
}
}
}
return;
}

int main()
{
int i;
for(i=1;i<=10;i++)
{
n=i;
count=0;
memset(map,0,sizeof(map));
memset(flag,0,sizeof(flag));
dfs(1);
ans[i]=count;
}
while(scanf("%d",&i)!=EOF && i)
{
printf("%d\n",ans[i]);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: