http://poj.org/problem?id=1573
1 #include<stdio.h> 2 #include<string.h> 3 char map[15][15]; 4 int main() 5 { 6 int n,m,k; 7 int i,j; 8 while(~scanf("%d %d %d",&n,&m,&k)) 9 { 10 getchar(); 11 if(n==0&&m==0&&k==0)break; 12 memset(map,'O',sizeof(map)); 13 for(i=1;i<=n;i++) 14 { 15 for(j=1;j<=m;j++) 16 scanf("%c",&map[i][j]); 17 getchar(); 18 } 19 int f[15][15]={0}; 20 int t,x=1,y=k; 21 for(t=0;;t++) 22 { 23 f[x][y]++; 24 if(map[x][y]=='N') 25 x--; 26 else if(map[x][y]=='S') 27 x++; 28 else if(map[x][y]=='W') 29 y--; 30 else if(map[x][y]=='E') 31 y++; 32 else if(map[x][y]=='O') 33 { 34 printf("%d step(s) to exit ",t); 35 break; 36 } 37 if(f[x][y]==2) 38 { 39 int row=x,col=y; 40 int flag=1; 41 for(x=1,y=k,t=0;;t++) 42 { 43 if(x==row&&y==col&&flag==1) 44 { 45 printf("%d step(s) before a loop of ",t); 46 t=0;flag++; 47 } 48 if(x==row&&y==col&&t!=0&&flag==2) 49 { 50 printf("%d step(s) ",t); break; 51 } 52 switch(map[x][y]) 53 { 54 case 'N': x--;break; 55 case 'S': x++;break; 56 case 'W': y--;break; 57 case 'E': y++;break; 58 } 59 } 60 break; 61 } 62 } 63 } 64 return 0; 65 }