zoj 2100 Seeding(dfs)
2011-11-20 18:27
387 查看
题意:
给出一个N*M的矩阵田,里面有石头。 从左上角开始走问能能把不是石头的部分走遍?
分析:
求一条路径,能否覆盖所有要求点。,这个题目wa了几次,一开始中间变量没有作为dfs函数的参数,发现在他回溯以后还是会把本来不应该走的也走了
于是就改了下参数,样例过了...……^_^,悲剧的是还是不行,偶想了想在后面加了个回溯,#%……#¥#@¥%¥真不想说什么就过了。
激动啊。其实不加的话问题也应该不大,,,现在还有带点问题就是什么时候需要回溯?他return以后不是自动到上一步,状态变回去了么...
给出一个N*M的矩阵田,里面有石头。 从左上角开始走问能能把不是石头的部分走遍?
分析:
求一条路径,能否覆盖所有要求点。,这个题目wa了几次,一开始中间变量没有作为dfs函数的参数,发现在他回溯以后还是会把本来不应该走的也走了
于是就改了下参数,样例过了...……^_^,悲剧的是还是不行,偶想了想在后面加了个回溯,#%……#¥#@¥%¥真不想说什么就过了。
激动啊。其实不加的话问题也应该不大,,,现在还有带点问题就是什么时候需要回溯?他return以后不是自动到上一步,状态变回去了么...
#include <stdio.h> char a[15][15]; int dir[4][2]={{1,0},{-1,0},{0,1},{0,-1}}; int flag,num,temp; void dfs(int x,int y,int temp); int main() { int n,m,i,j; while(scanf("%d%d",&n,&m)!=EOF) { flag=0; num=0; temp=0; if(n==0&&m==0) break; for(i=0;i<=n+1;i++) { a[i][0]='S'; a[i][m+1]='S'; } for(j=0;j<=m+1;j++) { a[0][j]='S'; a[n+1][j]='S'; } for(i=1;i<=n;i++) { getchar(); { for(j=1;j<=m;j++) { scanf("%c",&a[i][j]); if(a[i][j]=='.') num++; } } } dfs(1,1,1); if(flag==1) printf("YES\n"); else printf("NO\n"); } return 0; } void dfs(int x,int y,int temp) { int i; if(temp==num) {flag=1;return;} a[x][y]='S'; for(i=0;i<4;i++) { if(a[x+dir[i][0]][y+dir[i][1]]!='S') dfs(x+dir[i][0],y+dir[i][1],temp+1); } a[x][y]='.'; return ; }
相关文章推荐
- zoj2100 Seeding (DFS递归+回溯)
- zoj 2100 seeding(dfs)
- zoj 2100 Seeding 【DFS 判断是否能经过每个点一次遍历完整个图】
- ZOJ 2100 seeding 【DFS】
- ZOJ 题目2100 Seeding(DFS)
- (DFS)ZOJ 2100 Seeding
- zoj 2100 Seeding(DFS水水~)
- ZOJ 2100--Seeding【DFS】
- ZOJ 2100 Seeding(简单DFS)
- !ZOJ 2100--DFS(递归结束条件和回溯还是没理解好)
- zoj 2100 Seeding
- zoj 2100 Seeding
- zoj 2100 Seeding
- ZOJ Problem Set - 2100 (DFS)
- 图的搜索+回溯-Seeding(zoj 2100 )
- zoj2100(DFS)
- ZOJ 2100 Seeding
- zoj Seeding 2100
- zoj 2100 DFS
- zoj 2100 Seeding