zoj 2100 Seeding(DFS水水~)
2010-10-14 18:41
429 查看
激动啊激动啊无比激动啊!!!
可以说是第一道自己完全写的DFS。。。。激动!!!哈哈~~
在物理课上把代码写了写,敲的时候,有些地方还是有点问题的,又想了会,终于摆脱递归+回溯噩梦了。。。。/(^o^)/
专门找的DFS水题。。。因为我一遇到DFS就晕。。。理解不了,今天终于理解好了~~我太伟大了,哈哈哈哈哈哈哈哈哈哈~~
去上选修课去~~偶也~~~
深搜 还是用4个方向去搜索,直接把有石头的地方标记为已走过就OK~~
可以说是第一道自己完全写的DFS。。。。激动!!!哈哈~~
在物理课上把代码写了写,敲的时候,有些地方还是有点问题的,又想了会,终于摆脱递归+回溯噩梦了。。。。/(^o^)/
专门找的DFS水题。。。因为我一遇到DFS就晕。。。理解不了,今天终于理解好了~~我太伟大了,哈哈哈哈哈哈哈哈哈哈~~
去上选修课去~~偶也~~~
深搜 还是用4个方向去搜索,直接把有石头的地方标记为已走过就OK~~
#include <stdio.h> #include <stdlib.h> #include <iostream> using namespace std; int visit[8][8]; int n,m,ok; int dir[8] = {1,0,-1,0,0,1,0,-1}; void input() { char x; ok = 0; for(int i=1; i<=n; i++) { for(int k=1; k<=m; k++) { scanf("%c",&x); switch(x) { case '.': visit[i][k] = 0; break; case 'S': visit[i][k] = 1; break; } } getchar(); } } int traverse() { for(int i=1; i<=n; i++) for(int j=1; j<=m; j++) if( !visit[i][j] ) return 0; return 1; } void DFS(int i,int j) { visit[i][j] = 1; if( traverse() ) { ok = 1; return ; } for(int k=0; k<8; k+=2) { int a = i + dir[k]; int b = j + dir[k+1]; if( a>=1 && a<=n && b>=1 && b<=m && !visit[a][b] ) DFS(a,b); } if( !ok ) visit[i][j] = 0; return ; } int main(void) { while( scanf("%d %d",&n,&m)!=EOF && n) { getchar(); input(); DFS(1,1); ok == 1 ? printf("YES/n") : printf("NO/n"); } return 0; }
相关文章推荐
- zoj 2100 Seeding(dfs)
- ZOJ 2100 Seeding(简单DFS)
- 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
- zoj 2100 seeding
- ZOJ 2100 Seeding(深搜)
- zju 2100 Seeding(dfs暴搜)
- zoj 2100 Seeding
- zoj 2100 Seeding
- zoj 2100 Seeding
- zoj2100 Seeding
- zoj 2100(dfs深度优先遍历)
- zoj 2100 dfs暴力宽搜
- zoj 2100 水dfs