zoj 2100(dfs深度优先遍历)

来源:互联网 发布:浙江师范行知学院官网 编辑:程序博客网 时间:2024/06/11 06:00

这个题和上一题类似,都是回溯,用的方法基本上相同了,其实我是先做得得这道题,回溯+递归,深度优先遍历,是看了别人的代码才写出来的,明天继续练吧,深搜奋斗

#include<stdio.h>#include<stdlib.h>#include<string.h>int map[12][12];int step[4][2]={1,0,-1,0,0,1,0,-1};int m,n,ok;int travel(){for(int i=1;i<=n;i++)for(int j=1;j<=m;j++)if(!map[i][j])return 0;return 1;}void dfs(int x,int y){map[x][y]=1;int i,a,b;if(travel()){ok=1;return;}for(i=0;i<4;i++){a=x+step[i][0];b=y+step[i][1];if(a>=1&&b>=1&&a<=n&&b<=m&&!map[a][b])dfs(a,b);}if(!ok)map[x][y]=0;return;}int main(){int i,j,flag,flag1;char t;while(scanf("%d%d",&n,&m),m!=0||n!=0){ok=0;getchar();memset(map,0,sizeof(map));for(i=1;i<=n;i++){for(j=1;j<=m;j++){scanf("%c",&t);if(t=='S')map[i][j]=1;}getchar();}dfs(1,1);if(ok)printf("YES\n");elseprintf("NO\n");}return 0;}

0 0
原创粉丝点击