HDU 2553 N皇后问题(深搜+回溯)
2014-07-23 10:56
253 查看
http://acm.hdu.edu.cn/showproblem.php?pid=2553
回溯法,一直错在了标记为1,0上面,应该标记为++,这样回溯的时候才不会把别人的点还原;
同时,这一题要记录下来这10个的answer,否则TLE
回溯法,一直错在了标记为1,0上面,应该标记为++,这样回溯的时候才不会把别人的点还原;
同时,这一题要记录下来这10个的answer,否则TLE
#include<stdio.h> #include<cstring> #include<algorithm> using namespace std; int t, k, n; char map[105][105] = {0}; void dfs(int x, int y); int main() { while (~scanf("%d", &n) && n!=0) { k = 0; for(int i=1;i<=n;i++) { memset(map,0,sizeof(map)); dfs(1,i); } printf("%d\n",k); } } void dfs(int x, int y) { int xx, yy,i ,j; if(x==n) { k++; return; } for(i=1;i<=n;i++) { for(j=1;j<=n;j++) { if(i==x || j==y || x+y==i+j || x-i==y-j) map[i][j]++; //不能直接标记为0,用++能记录该点被用过多少次,否则下次回溯的时候,直接把重复的点他、也还原了 } } for(i=1;i<=n;i++) { if(map[x+1][i] == 0) { dfs(x+1,i); } } for(i=1;i<=n;i++) { for(j=1;j<=n;j++) { if(i==x || j==y || x+y==i+j || x-i==y-j) map[i][j]--; } } }
相关文章推荐
- 【dfs+回溯】hdu 2553 N皇后问题
- hdu 2553 N皇后问题(DFS+回溯)
- HDU 2553 n皇后问题(回溯)
- hdu 2553 N皇后问题(回溯)
- HDU 2553 n皇后问题(回溯)
- HDU 2553 N皇后问题 (DFS_回溯)
- hdu 2553 N皇后问题(回溯)
- HDU - 2553 N皇后问题 (初试回溯)
- hdu 2553 N皇后问题 dfs回溯
- HDU 2553 N皇后问题 (DFS+回溯)
- HDU 2553 N皇后问题 (回溯DFS)
- HDU 2553 N皇后问题 (回溯 深度优先搜索)
- HDOJ/HDU 2553 N皇后问题 回溯加递归
- HDU 2553 N皇后问题 dfs回溯+打表
- hdu 2553 N皇后问题(dfs+回溯)
- HDU 2553 N皇后问题(经典的回溯问题)
- N皇后问题 HDU 杭电2553【递归回溯】
- HDU 2553 N皇后问题 (DFS_回溯)
- HDU 2553 N皇后问题(回溯 + 剪枝)
- [HDU 2553]--N皇后问题(回溯)/N皇后问题的分析