hdu 2553 N皇后问题

来源:互联网 发布:淘宝新上的宝贝找不到 编辑:程序博客网 时间:2024/06/08 02:34

原题传送门: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;}

原创粉丝点击