标签:
Description
Input
Output
Sample Input
3 6 5 NEESWE WWWESS SNWWWW 4 5 1 SESWE EESNW NWEEN EWSEN 0 0
Sample Output
10 step(s) to exit 3 step(s) before a loop of 8 step(s)题意:就是给你n行m列的由N(向上)S(向下)W(向左)E(向右)组成的地图,写着什么就从那个方向走,如果能走出边界就打印出所走的步数,如果不是就计算出环的步数与不是环的步数。思路:深搜的题从入口进行深搜AC代码:#include<iostream> #include<cstdio> #include<cstring> using namespace std;int n; int m; char gra[1005][1005]; int visit[1005][1005]; int step,loop; void dfs(int x,int y){ if(y<0||y>=m||x<0||x>=n){ printf("%d step(s) to exit\n",step); return; }//出界 if(visit[x][y]==1){ visit[x][y]++;//把头标记为2 return ; }//到达环的有回溯 visit[x][y]++;//走过一次标记 1 step++; if(gra[x][y]==‘N‘){ dfs(x-1,y); } if(gra[x][y]==‘S‘){ dfs(x+1,y); } if(gra[x][y]==‘W‘){ dfs(x,y-1); } if(gra[x][y]==‘E‘){ dfs(x,y+1); } loop++;//环的步数 if(visit[x][y]==2){//回溯到环的头 printf("%d step(s) before a loop of %d step(s)\n",step-loop,loop); } }int main(){ int sy; while(~scanf("%d%d",&n,&m)&&n&&m){ scanf("%d",&sy); getchar(); for(int i=0;i<n;i++){ gets( gra[i] ); } memset(visit,0,sizeof(visit)); step=0; loop=0; dfs(0,sy-1); } return 0; } 注意:深搜的时候回溯回去的时候的处理。。。。。感觉深搜的题做起来有点小感觉了。。。。继续fighting
版权声明:本文为博主原创文章,未经博主允许不得转载。
标签:
原文地址:http://blog.csdn.net/qiuxueming_csdn/article/details/48141257