HDU ACM 2553 N皇后问题(深搜DFS)
2012-08-26 19:55
381 查看
http://acm.hdu.edu.cn/showproblem.php?pid=2553
用暴力的方法 , 二维数组米字型标记
注意:标记恢复时会有重复的标记,所以标记时不能用used[x][y] == 1 要用 used[x][y]++
即使只有1~10,10种数据但是这题输入的数据也非常多 所以要把数据用数组保存起来.
View Code
用暴力的方法 , 二维数组米字型标记
注意:标记恢复时会有重复的标记,所以标记时不能用used[x][y] == 1 要用 used[x][y]++
即使只有1~10,10种数据但是这题输入的数据也非常多 所以要把数据用数组保存起来.
View Code
#include <iostream> using namespace std; const int MAX = 10 + 5; int used[MAX][MAX]; int num; int q; void DFS(int n) { if(n - q == 1) { num++; return; } int i; int j; int k; for(i=1;i<=q;i++) { if(used [i] == 0) { for(j=n;j<=q;j++) { used[j][i]++; } for(j=1;1;j++) { if(n+j <= q) { if(i+j <= q) { used[n+j][i+j]++; } if(i-j > 0) { used[n+j][i-j]++; } } else { break; } } DFS(n+1); for(j=n;j<=q;j++) { used[j][i]--; } for(j=1;1;j++) { if(n+j <= q) { if(i+j <= q) { used[n+j][i+j]--; } if(i-j > 0) { used[n+j][i-j]--; } } else { break; } } } } return; } int main() { int mark[11]; int i; for(i=1;i<11;i++) { q = i; memset(used,0,sizeof(used)); num = 0; DFS(1); mark[i] = num; } while(cin>>q,q) { cout<<mark[q]<<endl; } return 0; }
相关文章推荐
- 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)
- HDU-2553 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+回溯)
- HDOJ 2553 N皇后问题(dfs+打表)
- 【dfs+回溯】hdu 2553 N皇后问题