hdu 1045 zoj1002 八皇后问题 dfs
2011-07-20 19:59
411 查看
题意:尽可能多的往棋盘上放城堡,因为城堡可以向上下左右射击,所以两个城堡不能在同一条x或者y上,但是墙壁可以挡住子弹,中间有墙的话就可以建多个城堡了。(讲的不是很清楚 题意还是自己去看比较好)
这个问题其实就是八皇后问题的更进一步,本来也就只是试试的想法做的,没想到 1A了。真是开心呀!
解题方法 : 回溯
http://acm.hdu.edu.cn/showproblem.php?pid=1045
这个问题其实就是八皇后问题的更进一步,本来也就只是试试的想法做的,没想到 1A了。真是开心呀!
解题方法 : 回溯
http://acm.hdu.edu.cn/showproblem.php?pid=1045
#include<stdio.h> #include<string.h> char map[105][105]; int a[105][105]; int n; bool can(int x,int y) // 判断这个位置能否放置城堡 { int i; for(i=y-1;i>=0;i--) if(map[x][i]=='X') break; else if(map[x][i]=='K') return false; for(i=x-1;i>=0;i--) if(map[i][y]=='X') break; else if(map[i][y]=='K') return false; return true; } int max; void dfs(int y,int count) { int i,j; if(count>max) max=count; for(j=y;j<n;j++) for(i=0;i<n;i++) { if(map[j][i]!='K'&&map[j][i]!='X'&&can(j,i)) { map[j][i]='K'; //将能放城堡的地方标记为K count++; dfs(j,count); count=0; //开始的时候忘记了下面两句话,对dfs深搜还不熟练呀 map[j][i]='.'; } } } int main() { while(scanf("%d",&n)==1,n) { getchar(); int i; for(i=0;i<n;i++) gets(map[i]); memset(a,0,sizeof(a)); max=-99; dfs(0,0); printf("%d\n",max); } return 0; }
相关文章推荐
- hdu 2553 N皇后问题 (DFS)
- hdu 2553:N皇后问题(DFS遍历,水题)
- HDU 2553 N皇后问题(还是DFS呀)
- HDU1045 类似8皇后的dfs
- HDU-OJ---N皇后问题(DFS)
- HDU-N皇后问题-DFS深度搜索
- 【HDU】2553 - N皇后问题(dfs)
- HDU 2553 N皇后问题( DFS + 剪枝 )
- HDU 2553 N皇后问题 (DFS_回溯)
- hdu 1045 || zoj 1002 Fire Net(搜索:DFS+水题)
- HDU 2553 N皇后问题 (DFS_回溯)
- HDU 2553 N皇后问题(DFS)
- HDU 2553 N皇后问题(深搜DFS)
- 文章标题 HDU 2553 : N皇后问题 (DFS)
- HDU-2553-N皇后问题【DFS】
- hdu2553八皇后问题(DFS)
- HDU 1045(二分图求最小点覆盖问题;dfs暴力)
- HDU 2553 N皇后问题 (DFS)
- HDU 2553 (DFS) N皇后问题
- hdu 2553 N皇后问题----搜索 dfs 回溯法 预处理