- 浏览: 37749 次
文章分类
- 全部博客 (41)
- 卧鸟个去 (2)
- Transform (2)
- Mathmatic (9)
- Plant-Tree (7)
- Data-Struct (12)
- Red-Black-Tree (1)
- Radix-Tree (1)
- Trie (2)
- String (4)
- BST (2)
- Amazing-Union-Find-Set (1)
- HDU (27)
- OJ (32)
- BFS (3)
- Pretty-Suffix-Array (2)
- POJ (6)
- Graceful-Segment-Tree (2)
- Geometry (6)
- Priority-Queue (2)
- Dynamic-Programing (1)
- DP (3)
- LCS (1)
- Convex-Hull (2)
- Triangulation (1)
- DFS (3)
- Combinatorial-Mathematics (2)
- Big-Number (1)
- Statistic (3)
- STL (1)
- Shortest-Path (3)
- ZOJ (1)
- Leftist-Tree (1)
- Prime (1)
- Binary-Index-Tree (1)
- (1)
- Stack (1)
- SPFA (0)
- CRT (1)
N皇后问题
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 1753 Accepted Submission(s): 769
Problem Description
在N*N的方格棋盘放置了N个皇后,使得它们不相互攻击(即任意2个皇后不允许处在同一排,同一列,也不允许处在与棋盘边框成45角的斜线上。
你的任务是,对于给定的N,求出有多少种合法的放置方法。
你的任务是,对于给定的N,求出有多少种合法的放置方法。
Input
共有若干行,每行一个正整数N≤10,表示棋盘和皇后的数量;如果N=0,表示结束。
Output
共有若干行,每行一个正整数,表示对应输入行的皇后的不同放置数量。
Sample Input
1 8 5 0
Sample Output
1 92 10
Author
cgf
Source
Recommend
lcy
经典问题,不过注意预处理之后先上交,唔系会超时{= =}
贴代码:
4286478 | 2011-07-29 14:21:12 | Accepted | 2553 | 31MS | 240K | 1060 B | C++ | 10SGetEternal{(。)(。)}! |
#include <iostream> using namespace std; #define MAXI 11 int maz[MAXI][MAXI]; void mark(int n, int x, int y, int add) { int i, f = 1; for (i = 0;f ; i++) { f = 0; if (x - i >= 0 || y - i >= 0 || x + i < n || y + i < n) { f = 1; if (x + i < n) maz[x + i][y] += add; if (y + i < n) maz[x][y + i] += add; if (x - i >= 0) maz[x - i][y] += add; if (y - i >= 0) maz[x][y - i] += add; if (x + i < n && y + i < n) maz[x + i][y + i] += add; if (x + i < n && y - i >= 0) maz[x + i][y - i] += add; if (x - i >= 0 && y + i < n) maz[x - i][y + i] += add; if (x - i >= 0 && y - i >= 0) maz[x - i][y - i] += add; } } } int DFS(int x, int n) { int y, tsu = 0; if (x == n) return 1; for (y = 0; y < n; y++) if (!maz[x][y]) { mark(n, x, y, 1); tsu += DFS(x + 1, n); mark(n, x, y, -1); } return tsu; } int main() { int n, i, step[MAXI]; for (i = 0; i < MAXI; i++) step[i] = DFS(0, i); while (scanf("%d", &n), n) printf("%d\n", step[n]); return 0; }
水题也……
发表评论
-
HDU 1370 Biorhythms
2011-08-03 10:27 1198Biorhythms Time Limit: 2000/10 ... -
HDU 1075 What Are You Talking About
2011-08-04 11:00 868What Are You Talking About Tim ... -
HDU 1058 Humble Numbers
2011-08-02 15:55 1227Humble Numbers Time Limit: 200 ... -
HDU 2095 find your present (2)
2011-08-02 16:13 822find your present (2) Time Lim ... -
HDU 1022 Train Problem I
2011-08-02 21:00 1017Train Problem I Time Limit: 20 ... -
2142 HDU box
2011-08-02 21:21 766box Time Limit: 3000/1000 MS ( ... -
HDU 2151 Worm
2011-08-01 20:48 857Worm Time Limit: 1000/1000 MS ... -
HDU 2722 Here We Go(relians) Again
2011-08-02 00:06 1031Here We Go(relians) Again Time ... -
HDU 3791 二叉搜索树
2011-08-02 14:26 1212二叉搜索树 Time Limit: 20 ... -
PKU 2352 Stars
2011-07-31 21:47 1033Stars Time Limit: 1000MS ... -
PKU 2774 Long Long Message
2011-07-31 21:26 908Long Long Message Time Li ... -
PKU 2777 Count Color
2011-07-31 21:31 802Count Color Time Limit: 1 ... -
HDU 2098 分拆素数和
2011-07-31 21:08 1065分拆素数和 Time Limit: 1000/1000 MS ... -
ZOJ 3512 Financial Fraud .
2011-07-31 20:49 1293Financial Fraud Time Limit: 3 ... -
HDU 1798 Tell me the area .
2011-07-31 20:47 1130Tell me the area Time Limit: 3 ... -
HDU 2962 Trucking .
2011-07-31 20:46 690Trucking Time Limit: 20000/100 ... -
HDU 1596 find the safest road .
2011-07-31 20:45 605find the safest road Time Limi ... -
HDU 1392 Surround the Trees .
2011-07-31 20:19 804Surround the Trees Time Limit: ... -
HDU 1234 开门人和关门人 .
2011-07-31 20:17 677开门人和关门人 Time Limit: 2000/1000 ... -
HDU 1316 How Many Fibs? .
2011-07-31 20:15 981How Many Fibs? Time Limit: 200 ...
相关推荐
8. **回溯与分支限界**:2301-2350号题目可能涉及这些问题,如八皇后问题、N皇后问题、排列组合等。 9. **模拟与建模**:2351-2400号题目可能需要对实际问题进行抽象,通过编写程序模拟现实世界中的过程。 10. **...
5. **回溯法**:通过试探性的前进和撤销,寻找所有可能的解,如八皇后问题、N皇后问题、数独求解等。 6. **深度优先搜索和广度优先搜索**:在图或树中进行遍历,如拓扑排序、强连通分量、最小生成树等。 7. **数学...
例如,八皇后问题、N皇后问题等,都需要通过搜索所有可能的状态来找到解决方案。 4. **剪枝**:在搜索过程中,剪枝是一种优化策略,用于提前终止那些肯定不会导致解的子树的搜索。这可以显著减少搜索空间,提高效率...
6. **递归与回溯**:递归是解决许多问题的有效手段,而回溯则是解决组合优化问题的经典策略,如八皇后问题、N皇后问题、数独求解等。 7. **分治与贪心策略**:这两种思想是设计算法的重要指导原则,分治将大问题...
7. **递归与回溯**:许多问题可以通过递归和回溯的方式求解,例如八皇后问题、N皇后问题、迷宫问题等。 8. **贪心策略**:有些问题可以通过局部最优决策达到全局最优,贪心算法在这种情况下非常有效。 9. **模拟法...
n皇后问题位运算版.mht Search in a Graph.mht STL in Searching.mht USACO搜索策略.mht 递归分治课件 - from tju.ppt 浅谈部分搜索+高效算法在搜索问题中的应用.doc 深度优先搜索-bylove8909.doc 搜索基础.pdf 搜索...
- 1086——1.cpp: 可能是关于回溯法的题目,用于解决如八皇后问题、N皇后问题、数独等。 4. **树与图的深度优先搜索(DFS)与广度优先搜索(BFS)** - 1088.cpp: 可能需要使用DFS或BFS来遍历树或图,解决树的...
8. **回溯法**:对于一些组合优化问题,如八皇后问题、N皇后问题、括号生成等,可能会用到回溯法来穷举所有可能的解。 9. **分治法**:对于复杂问题,分治法是一种有效的策略,如快速排序、归并排序、大数乘法等。 ...
10. **回溯法**:用于解决约束满足问题,如八皇后问题、N皇后问题等。 11. **模拟法**:根据题目描述直接模拟过程,求得结果。 12. **编程语言基础**:C++、Java、Python等编程语言的基础语法、效率分析和优化技巧...
7. **回溯与剪枝**:八皇后问题、N皇后问题、迷宫求解等。 8. **模拟**:模拟实际操作,如时间计算、物理过程模拟等。 9. **位运算**:利用位运算快速解决一些问题,如奇偶性判断、数组操作等。 通过这两个平台的...
递归和回溯也是解决博弈问题的重要方法,特别是在解决棋类问题时,如八皇后问题或N皇后问题。 文件名"hdu"和"Pku"可能是指来自两个著名的在线判题系统——HDU(杭州电子科技大学在线评测系统)和PKU(北京大学在线...
这些算法常用于解决组合优化问题,如八皇后问题、N皇后问题等。 2048题可能涉及到数值计算、模拟或者组合博弈论。这些题目可能需要选手对数学模型有深入理解,并能用程序准确地模拟现实情况。 2049题和2050题可能...
5. **搜索算法**:深度优先搜索(DFS)和广度优先搜索(BFS)是图和树问题中的常用方法,也可能涉及回溯法和剪枝策略,用于解决组合优化问题如八皇后问题、N皇后问题等。 6. **字符串处理**:如KMP算法、Boyer-...
- **应用场景**:N 皇后问题、Sudoku 游戏等。 ### 其他 #### 1. 高精度 - **概念**:在计算时,当数值过大或过小超出基本数据类型范围时使用的特殊计算方法。 - **实现方式**:通常使用数组来模拟大整数的存储,并...
5. **回溯法**:用于解决组合优化问题,如八皇后问题、N皇后问题等,通过不断尝试和撤销来寻找所有可能的解。 6. **模拟**:有些题目要求按照特定规则进行操作,这时可以通过编写程序来模拟这些规则。 7. **数学**...