HDU-OJ---N皇后问题(DFS)
2015-04-19 23:14
381 查看
Problem D
Time Limit : 2000/1000ms (Java/Other) Memory Limit : 32768/32768K (Java/Other)Total Submission(s) : 7 Accepted Submission(s) : 4
Font: Times New Roman | Verdana | Georgia
Font Size: ← →
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 <cstdio> #include <cstring> #include <iostream> using namespace std; int n,tmp; int map[11]; void DFS(int k) { int i,j,flag; if(k==n+1) { tmp++; return; } else { for(i=1;i<=n;++i) { map[k]=i; flag=1; for(j=1;j<k;++j) { if(map[j]==i||i-k==map[j]-j||i+k==map[j]+j) //回溯 { flag=0; break; } } if(flag) DFS(k+1); } } } int main() { int i,m; int ans[11]; for(n=1;n<=10;++n) { tmp=0; DFS(1); ans =tmp; } while(scanf("%d",&m),m) { printf("%d\n",ans[m]); } return 0; }
different:bool表,周大神的超精简解法,看到后惊呆了~~~
#include <iostream> #include <cstring> #define N 12 using namespace std; int n; int COUNT; bool L ; bool zq[2*N]; bool yq[2*N]; int getzq(int r,int c) { return n+r-c; } int getyq(int r,int c) { return r+c; } void dfs(int index=0) { if(index==n) { COUNT++; } for(int i=0;i<n;i++) { if(L[i]||zq[ getzq(index,i) ]||yq[ getyq(index,i) ])continue; L[i]=zq[ getzq(index,i) ]=yq[ getyq(index,i) ]=true; dfs(index+1); L[i]=zq[ getzq(index,i) ]=yq[ getyq(index,i) ]=false; } } int main() { int s[11]; int i=1; while(i!=11) { n=i; memset(L,0,sizeof(L)); memset(zq,0,sizeof(zq)); memset(yq,0,sizeof(yq)); COUNT=0; dfs(); s[i]=COUNT; i++; } while(cin>>n) { if(n==0)break; cout<<s <<endl; } return 0; }
相关文章推荐
- hdu 1045 zoj1002 八皇后问题 dfs
- hdu n皇后问题 (dfs)
- hdu 2553 N皇后问题(dfs)
- HDU N皇后问题 (DFS)
- HDU 2553 N皇后问题(还是DFS呀)
- hdu 2553 N皇后问题(dfs)
- hdu 2553 N皇后问题 dfs回溯
- 【HDU】-2553-N皇后问题(DFS)
- hdu 2553 N皇后问题 (经典DFS)
- hdu 2553 N皇后问题 (经典DFS)
- (hdu step 4.3.6)N皇后问题(使用DFS来解决)
- 【dfs+回溯】hdu 2553 N皇后问题
- HDU 2553 N皇后问题 深搜-dfs
- HDU 2553 N皇后问题(DFS+打表)
- HDU 2553 N皇后问题 DFS 简单题
- HDU 2553 N皇后问题(dfs)
- hdu 2553 N皇后问题(有点坑爹的深搜题dfs)
- HDU - 2553:N皇后问题(经典DFS)
- hdu 2553 N皇后问题【dfs】
- hdu 2553 N皇后问题----搜索 dfs 回溯法 预处理