N皇后问题<经典DFS>
2017-07-28 16:56
281 查看
N皇后问题
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 21526 Accepted Submission(s): 9635
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
Author
cgf
Source
2008
HZNU Programming Contest
经典的DFS,但是在这里注意打表就行,不然会超时
#include <iostream> #include <cstring> #include <stack> #include <cstdio> #include <cmath> #include <queue> #include <algorithm> #include <vector> #include <set> #include <map> const double eps=1e-8; const double PI=acos(-1.0); using namespace std; int n; int l[50],r[50],a[50],ans[20];//主对角线,副对角线,当前列,结果打表; void f(int i){ if(i==n) ans ++; else { for(int j=0;j<n;j++) { if(!l[j-i+n]&&!r[i+j]&&!a[j]) { l[j-i+n]=r[i+j]=a[j]=1; f(i+1); l[j-i+n]=r[i+j]=a[j]=0; } } } } int main() { for(int i=1;i<=10;i++){ n=i; f(0); } while(~scanf("%d",&n)&&n){ printf("%d\n",ans ); } return 0; }
相关文章推荐
- (POJ1321) 棋盘问题 <DFS ,八皇后问题的变形,皇后数目小于等于行数即有些行可以不放>
- n皇后问题<dfs>
- N皇后问题<DFS>
- 经典算法问题的java实现<二>
- HDU2553 - N皇后问题 - 经典dfs+打表过
- HDU - 2553:N皇后问题(经典DFS)
- 杭电-N皇后问题(经典DFS搜索)
- 回溯法之经典问题->皇后问题
- hdu 2553 N皇后问题 经典搜索,DFS解法
- hdu 2553 N皇后问题 (经典DFS)
- hdu 2553 N皇后问题 经典dfs
- <LeetCode> 题33:N皇后问题
- 数据结构与算法之DFS/BFS解决扫雷问题<十五>
- <转载> 8皇后问题(java算法实现)
- 经典DFS之N皇后问题
- kb-01-a<简单搜索--dfs八皇后问题变种>
- FZU 1205 小鼠迷宫问题 <BFS+DFS>
- N皇后问题(经典DFS)
- HDU-2553 N皇后问题(DFS经典题)
- hdu 2553 N皇后问题<java>