hdu2553(N皇后问题)
2015-08-08 01:30
295 查看
点击打开链接
你的任务是,对于给定的N,求出有多少种合法的放置方法。
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 <stdio.h> #include <string.h> int map[15][15],n,count;//d[8][2]={{1,0},{-1,0},{0,1},{0,-1},{1,1},{1,-1},{-1,1},{-1,-1}}; int AC(int x,int y) { int i,j,sign,k; i=x;j=y; sign=1; if(map[x][y]==1) return 0; for(k=1;j+k<=n;k++) if(map[i][j+k]==1){sign=0; break;}//右方向 for(k=1;j-k>=1;k++) if(map[i][j-k]==1){sign=0;break;}//左方向 for(k=1;i-k>=1;k++) if(map[i-k][j]==1){sign=0;break;}//上方向 for(k=1;i+k<=n;k++) if(map[i+k][j]==1){sign=0;break;}//下方向 for(k=1;i+k<=n&&j+k<=n;k++) if(map[i+k][j+k]==1){sign=0;break;}//右下方向 for(k=1;i+k<=n&&j-k>=1;k++) if(map[i+k][j-k]==1){sign=0;break;}//右上方向 for(k=1;i-k>=1&&j+k<=n;k++) if(map[i-k][j+k]==1){sign=0;break;}//左下方向 for(k=1;i-k>=1&&j-k>=1;k++) if(map[i-k][j-k]==1){sign=0;break;}//左上方向 return sign; } void DFS(int i) { int j; if(i>n) { count++; return ; } for(j=1;j<=n;j++) if(AC(i,j)) { map[i][j]=1; DFS(i+1); map[i][j]=0; } } int main() { int i,m,aa[15]; for(n=1;n<=10;n++) { count=0; memset(map,0,sizeof(map)); DFS(1); aa =count; } //for(i=1;i<=10;i++) //printf("%d ",aa[i]); while(scanf("%d",&m)!=EOF&&m!=0) { printf("%d\n",aa[m]); } return 0; }
相关文章推荐
- DTcms学习日记02(2015年8月7日)
- 深度解读运维自动化
- static_cast, dynamic_cast, reinterpret_cast, const_cast区别比较
- 小米发布的运维监控工具:open falcon
- 华为在线OJ_找7
- Cassandra源代码分析:数据写入流程
- HDU2181哈密顿绕行世界问题(DFS +路径输出)
- Mysql数据库主从整理
- Web UI设计师的CSS优化工具 25+
- shell脚本_自动安装mysql
- Activity四种启动模式
- Android自定义属性
- Windows10 显示库、隐藏6个文件夹、隐藏OneDrive
- 黑马程序员--IO流File类总结--java
- CSDN-markdown编辑器
- feof()函数问题
- feof()函数问题
- 天猫首页迷思之-jquery实现整个div的懒加载(1)
- 黑 4000 马程序员--异常总结--java
- 《高效程序员的45个习惯》读书笔记