一道模拟题 难点不是过程的思考 难点在于计数上 需要建立一个vis[ ][ ]数组来存储数据
# include <stdio.h>
# include <string.h>
char map[15][15];
int vis[15][15];
int main ()
{
int m,n,j,i,count;
int a,b;
while(scanf("%d %d %d",&m,&n,&j)!=EOF)
{
if(0==m&&0==n)
break;
a=0;
b=j-1;
count=0;
memset(vis,-1,sizeof(vis));
vis[a][b]=0;
for(i=0;i<m;i++)
scanf("%s",map[i]);
while(1)
{
count=++vis[a][b];
if(map[a][b]=='N')
a=a-1;
else if(map[a][b]=='S')
a=a+1;
else if(map[a][b]=='W')
b=b-1;
else
b=b+1;
if(a<0||a>=m||b<0||b>=n)
{
printf("%d step(s) to exit\n",count);
break;
}
else if(vis[a][b]!=-1)
{
printf("%d step(s) before a loop of %d step(s)\n",vis[a][b]-1,count-vis[a][b]+1);
break;
}
else
{
vis[a][b]=count;
}
}
}
return 0;
}