暑假集训第三周周六赛 搜索 E - N皇后问题
2015-08-02 14:03
246 查看
E - N皇后问题
Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d
& %I64u
Submit Status Practice HDU
2553
Description
在N*N的方格棋盘放置了N个皇后,使得它们不相互攻击(即任意2个皇后不允许处在同一排,同一列,也不允许处在与棋盘边框成45角的斜线上。
你的任务是,对于给定的N,求出有多少种合法的放置方法。
Input
共有若干行,每行一个正整数N≤10,表示棋盘和皇后的数量;如果N=0,表示结束。
Output
共有若干行,每行一个正整数,表示对应输入行的皇后的不同放置数量。
Sample Input
1
8
5
0
Sample Output
1
92
10
分析:
这是著名的n皇后问题,注意各种边界,各种特殊值的处理,就会比较好做了
还需要注意的是这种题最好是提前打表,不然可能会输出超限
Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d
& %I64u
Submit Status Practice HDU
2553
Description
在N*N的方格棋盘放置了N个皇后,使得它们不相互攻击(即任意2个皇后不允许处在同一排,同一列,也不允许处在与棋盘边框成45角的斜线上。
你的任务是,对于给定的N,求出有多少种合法的放置方法。
Input
共有若干行,每行一个正整数N≤10,表示棋盘和皇后的数量;如果N=0,表示结束。
Output
共有若干行,每行一个正整数,表示对应输入行的皇后的不同放置数量。
Sample Input
1
8
5
0
Sample Output
1
92
10
分析:
这是著名的n皇后问题,注意各种边界,各种特殊值的处理,就会比较好做了
还需要注意的是这种题最好是提前打表,不然可能会输出超限
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44
#include<stdio.h> #include<string.h> #include<cmath> using namespace std; int s,v[12],n; void DFS(int k) { int i,j,f; if(k>n) { s++; return ; } else for(i=1; i<=n; ++i) { v[k]=i; f=1; for(j=1; j<k; ++j) if(v[j]==i||abs(k-j)==abs(v[k]-v[j])) { f=0; break; } if(f) DFS(k+1); } } int main() { int m,i,a[12]; for(n=1; n<=10; n++) { s=0; DFS(1); a[n]=s; } while(scanf("%d",&m)&&m) { printf("%d\n",a[m]); } return 0; }
相关文章推荐
- DFS解数独问题
- hdu1016 Prime Ring Problem 素数环
- hdu1241Oil Deposits 深广搜
- 深搜随想
- UVA 291 The House Of Santa Claus(DFS/深搜)
- POJ 2192 / ZOJ 2401 : Zipper - DP
- POJ3009 Curling 2.0 DFS 深搜
- 小学生玩ACM----深搜
- 杭电 HDU 1426 Sudoku Killer
- NYOJ927The partial sum problem
- NYOJ587blockhouses
- 搜索之“炸弹人”
- hdu1584 深搜水题
- 2012蓝桥杯决赛-数独
- 历届试题 大臣的旅费
- NYOJ--20(搜索)-题目----------------------------- 吝啬的国度
- NYOJ--32(搜索)-题目-----------------------------组合数
- NYOJ--27(搜索)-题目-----------------------------水池数目
- NYOJ--42(搜索)-题目----------------------------- 一笔画问题
- NYOJ--58(搜索)-题目-----------------------------最少步数