模拟操作,无需多言。
/*
* hdu-1035
* mike-w
* 2012-4-21
*/
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define MAX_SIZE 32
char f[MAX_SIZE][MAX_SIZE];
int g[MAX_SIZE][MAX_SIZE];
int rec[MAX_SIZE][MAX_SIZE];
int d[4][2]={{0,1},{0,-1},{1,0},{-1,0}};
int N,M,P;
int explore(void)
{
memset(rec,0,sizeof(rec));
int x=0,y=P-1;
int xx=0,yy=P-1,loop=0,turn;
while(xx>=0 && xx<N && yy>=0 && yy<M)
{
rec[xx][yy]=rec[x][y]+1;
x=xx,y=yy;
turn=g[x][y];
xx=x+d[turn][0];
yy=y+d[turn][1];
if(rec[xx][yy])
{
loop=1;
break;
}
}
if(loop)
printf("%d step(s) before a loop of %d step(s)\n",
rec[xx][yy]-1,rec[x][y]+1-rec[xx][yy]);
else
printf("%d step(s) to exit\n",rec[x][y]);
return 0;
}
int main(void)
{
#ifndef ONLINE_JUDGE
freopen("in","r",stdin);
#endif
int i,j;
while(scanf("%d%d%d",&N,&M,&P),N||M||P)
{
memset(g,0,sizeof(g));
for(i=0;i<N;i++)
scanf("%s",f[i]);
for(i=0;i<N;i++)
for(j=0;j<M;j++)
{
if(f[i][j]=='N')
g[i][j]=3;
else if(f[i][j]=='S')
g[i][j]=2;
else if(f[i][j]=='W')
g[i][j]=1;
else
g[i][j]=0;
}
explore();
}
return 0;
}