顺着搜就行了。 #include<cstdio> #include<cstring> using namespace std; int r,c,sta; char gra[15][15]; int s[15][15]; bool check(int x,int y) { if (x>=0&&x<r&&y>=0&&y<c) return 1; return 0; } bool Search(int &step,int &loop) { int i,j,x,y,dx,dy,cnt=0; memset(s,-1,sizeof(s)); x=0,y=sta-1; s[x][y]=0; while (check(x,y)){ switch(gra[x][y]){ case 'N': dy=y,dx=x-1; break; case 'E': dx=x,dy=y+1; break; case 'W': dx=x,dy=y-1; break; case 'S': dy=y,dx=x+1; break; } if (!check(dx,dy)) break; if (s[dx][dy]<0) s[dx][dy]=++cnt; else { loop=cnt-s[dx][dy]+1; step=s[dx][dy]; return 0; } x=dx,y=dy; } step=cnt+1; return 1; } int main() { int i,a,b; while (scanf("%d%d%d",&r,&c,&sta)&&(r+c+sta)){ for (int i=0;i<r;i++) scanf("%s",gra[i]); a=b=0; if (Search(a,b)) printf("%d step(s) to exit/n",a); else printf("%d step(s) before a loop of %d step(s)/n",a,b); } return 0; }