HDU 2553 N皇后问题
2015-08-05 20:45
399 查看
分析
复健。一题经典的回溯法,要打表。代码
#include <cstdio> #define MAX_N 11 int n, res; int c[MAX_N], ans[MAX_N]; void dfs(int cur) { if (cur == n+1) res++; else for (int i = 1; i <= n; i++) { c[cur] = i; int flag = 1; for (int j = 1; j < cur; j++) if (c[j] == i || i-cur == c[j]-j || i+cur == c[j]+j) { flag = 0; break; } if (flag) dfs(cur+1); } } int main() { for (n = 1; n <= MAX_N-1; n++) { res = 0; dfs(1); ans = res; } int m; while (scanf("%d", &m), m) printf("%d\n", ans[m]); return 0; }
其实…是吧…
#include <cstdio> int a, r[10] = {1,0,0,2,10,4,40,92,352,724}; int main() { while (scanf("%d", &a), a) printf("%d\n", r[a-1]); return 0; }
题目
Description
在N*N的方格棋盘放置了N个皇后,使得它们不相互攻击(即任意2个皇后不允许处在同一排,同一列,也不允许处在与棋盘边框成45角的斜线上。你的任务是,对于给定的N,求出有多少种合法的放置方法。
Input
共有若干行,每行一个正整数N≤10,表示棋盘和皇后的数量;如果N=0,表示结束。Output
共有若干行,每行一个正整数,表示对应输入行的皇后的不同放置数量。Sample Input
1 8 5 0
Sample Output
1 92 10
相关文章推荐
- hdu 5349 MZL's simple problem(15多校第五场1007)
- c++之简单I/O格式控制
- uva 12186 Another Crisis 树形dp
- 黑马程序员——break和continue语句+函数+函数重载-第4天
- Android-Activity之间数据传递的多种方式
- 学习JS权威指南记录
- 黑马程序员—JAVA基础—反射
- Android 四大组件之Content Provider
- Dividing
- Android Studio 视图解析
- 快速排序
- hdu 5348 MZL's endless loop(15多校第五场1006) 欧拉路
- uva 10608 Friends(并查集)
- 新手的linux之旅 三、连网
- Oracle 树操作(select…start with…connect by…prior)
- 右键新建文本文档消失解决办法
- Java 类初始化过程
- [Jobdu] 题目1385:重建二叉树
- 黑马程序员—JAVA基础—网络编程
- 黑马程序员—JAVA基础—GUI(图形化界面编程)