HDU2553N皇后问题(BFS)
2015-07-05 23:37
330 查看
N皇后问题
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 12120 Accepted Submission(s): 5466
Problem Description
在N*N的方格棋盘放置了N个皇后,使得它们不相互攻击(即任意2个皇后不允许处在同一排,同一列,也不允许处在与棋盘边框成45角的斜线上。
你的任务是,对于给定的N,求出有多少种合法的放置方法。
Input
共有若干行,每行一个正整数N≤10,表示棋盘和皇后的数量;如果N=0,表示结束。
Output
共有若干行,每行一个正整数,表示对应输入行的皇后的不同放置数量。
Sample Input
1 8 5 0
Sample Output
1 92 10
#include <iostream> #include <cstdio> #include <algorithm> #include <cstring> using namespace std; int n,ans=0; int vis[3][21]; int a[11]; void bfs(int p) { if(p==n) { ans++; return; } for(int i=0;i<n;i++) { int x=p;int y=i; if(!vis[0][i]&&!vis[1][x+y]&&!vis[2][x-y+n]) { vis[0][i]=vis[1][x+y]=vis[2][x-y+n]=1; bfs(p+1); vis[0][i]=vis[1][x+y]=vis[2][x-y+n]=0; } } } int main() { memset(a,0,sizeof(a)); while(~scanf("%d",&n),n) { if(!a ) { ans=0; memset(vis,0,sizeof(vis)); bfs(0); printf("%d\n",ans); a =ans; } else printf("%d\n",a ); } return 0; }PS:一定要把答案存起来,只有10个数。要不然回溯会TLE!!!
相关文章推荐
- 校内ACM上出现Presentation Error的一点经验
- UIImage imageNamed格式要求
- java -D参数简化加入多个jar【简化设置classpath】
- [转]《高性能MySQL》读书笔记--Schema与数据类型优化
- 区分const指针
- Codeforces 238E. Meeting Her 图论+记忆化搜索
- HDU4630:No Pain No Game(线段树)
- 快速傅里叶变换用于长整数相乘
- 2天驾驭DIV+CSS (技巧篇)(转)
- AngularJS自定义表单控件
- LR11.5 安卓模拟器性能测试
- 两个栈来实现一个队列的C++代码(某公司社会早笔试题)
- 2015070510 - 挑战失败
- mac下安装、配置nexus,构建maven私服
- IIR递归高斯滤波总结
- 签到领金币
- Lua53
- 管理定律-管人用人育人留人之道
- HDU4622:Reincarnation(后缀数组,求区间内不同子串的个数)
- 2015070509 - 看书效率