题意:
根据给出的矩阵中的NEWE判断走向,若能走出则输出
10 step(s) to exit
若不能走出则输出
3 step(s) before a loop of 8 step(s)
分析:
水题,但很像这几天做的dfs,只是形式==b.浪费了我好长时间调试,还写的特挫。
遇到的问题:
1. 初始化边界搞了一会儿,发现行列弄错了。。。囧//
2. 设置标记数组时,问题爆了很多,最后发现要避免path=2又被path=1覆盖为1.
哎,设了很多标记,可读性就变弱了。>,<….
#include <stdio.h> #include <string.h> int main() { int row,col,start; int i,j,x,y,path[15][15],count,flag,ff,f1; char a[15][15]; while(scanf("%d%d%d",&row,&col,&start)!=EOF) { count=0; ff=0; f1=0; flag=0; for(i=0;i<15;i++) for(j=0;j<15;j++) path[i][j]=0; if(row==0&&col==0&&start==0) break; for(i=1;i<=row;i++) { scanf("%s",&a[i][1]); } for(i=0;i<row+2;i++) { a[i][0]='0'; a[i][col+1]='0'; } //a[i][0]='\0'; for(i=0;i<col+2;i++) { a[0][i]='0'; a[row+1][i]='0'; } //a[0][i]='\0'; x=1; y=start; while(1) { if(path[x][y]!=2) path[x][y]=1;//怎样避免path=2又被覆盖为1。 if(a[x][y]=='0') break; if(path[x][y]==2&&f1==1) break; else if(path[x][y]==2) f1=1; if(a[x][y]=='N') { x--;count++; } else if(a[x][y]=='S') { x++;count++; } else if(a[x][y]=='E') { y++;count++; } else if(a[x][y]=='W') { y--;count++; } if(path[x][y]==1) { flag++; if(ff==0) { ff=1; path[x][y]=2; } } } if(flag==0) printf("%d step(s) to exit\n",count); else printf("%d step(s) before a loop of %d step(s)\n",count-2*flag,flag); } return 0; }