HDU 1045 Fire Net(DFS)
2012-07-20 21:13
309 查看
题目链接
普通的DFS。
普通的DFS。
#include <stdio.h> #include <string.h> char p[5][5]; int max,o[5][5],n; int judge(int x,int y) { int i,z = 1; for(i = x+1;i <= n-1;i ++) { if(o[i][y] == 2) { z = 0; break; } else if(o[i][y] == 1) break; } for(i = x-1;i >= 0;i --) { if(o[i][y] == 2) { z = 0; break; } else if(o[i][y] == 1) break; } for(i = y+1;i <= n-1;i ++) { if(o[x][i] == 2) { z = 0; break; } else if(o[x][i] == 1) break; } for(i = y-1;i >= 0;i --) { if(o[x][i] == 2) { z = 0; break; } else if(o[x][i] == 1) break; } return z; } void dfs(int x,int y,int step) { int r,c; if(x > n-1) { if(max < step) max = step; return ; } if(y == n-1) { r = x+1; c = 0; } else { r = x; c = y+1; } if(o[x][y] == 0) { if(judge(x,y)) { o[x][y] = 2; dfs(r,c,step+1); o[x][y] = 0; dfs(r,c,step); } else { dfs(r,c,step); } } else dfs(r,c,step); } int main() { int i,j; while(scanf("%d%*c",&n)!=EOF) { if(!n) break; max = 0; memset(o,0,sizeof(o)); for(i = 0; i <= n-1; i ++) gets(p[i]); for(i = 0; i <= n-1; i ++) for(j = 0; j <= n-1; j ++) { if(p[i][j] == 'X') o[i][j] = 1; } dfs(0,0,0); printf("%d\n",max); } return 0; }
相关文章推荐
- hdu 1045 Fire Net (dfs)
- 【DFS 回溯】HDU 1045 Fire Net
- hdu 1045 Fire Net (dfs || 二分图)
- hdu 1045 || zoj 1002 Fire Net(搜索:DFS+水题)
- hdu1045 Fire Net (dfs)
- hdu 1045 && zoj 1002 Fire Net(DFS && 二分图匹配)
- hdu 1045 Fire Net (最爱 DFS)
- HDU 1045-Fire Net(DFS)
- HDU 1045 Fire Net(DFS)
- HDU 1045 Fire Net(DFS)
- hdu 1045 Fire Net(DFS)
- HDU - 1045 - Fire Net (DFS)
- HDU 1045 Fire Net (DFS)
- hdu 1045 Fire Net(dfs)
- HDOJ(HDU).1045 Fire Net (DFS)
- hdu-1045 Fire Net(DFS)
- hdu 1045 Fire Net (DFS)
- HDU 1045 Fire Net(DFS回溯)
- 【DFS】hdu 1045 Fire Net
- 【HDU 1045】Fire Net(DFS,check函数)