/*为了计算循环时的步数,
用visit来及所走每一个点的步数;
同时,他也其标记的作用。。*/
#include"stdio.h"
#include"string.h"
char map[100][100];
int visit[100][100];
int n,m,step;
int judge(int x,int y)
{
if(x>=0&&x<n&&y>=0&&y<m)
return 1;
return 0;
}
int bfs(int x,int y)
{
while(1)
{
if(judge(x,y)==0)
{
printf("%d step(s) to exit\n",step-1);
return 0;
}
if(visit[x][y])
{
printf("%d step(s) before a loop of %d step(s)\n",visit[x][y]-1,step-visit[x][y]);
return 0;
}
visit[x][y]=step;
if(map[x][y]=='N')
{
x--;
step++;
}
else if(map[x][y]=='S')
{
x++;
step++;
}
else if(map[x][y]=='W')
{
y--;
step++;
}
else if(map[x][y]=='E')
{
y++;
step++;
}
}
}
int main()
{
int i,k;
while(scanf("%d%d%d",&n,&m,&k),n||m||k)
{
memset(visit,0,sizeof(visit));
for(i=0;i<n;i++)
scanf("%s",map[i]);
step=1;//这里注意从一开始这样最后结果,再减一即可,从零一直提交错误。。
bfs(0,k-1);
}
return 0;
}
#include"stdio.h" #include"string.h" char map[100][100]; int dp[100][100]; int n,m,step; int judge(int x,int y) { if(x>=0&&x<n&&y>=0&&y<m) return 1; return 0; } int bfs(int x,int y) { if(judge(x,y)==0) { printf("%d step(s) to exit\n",step-1); return 0; } if(dp[x][y]) { printf("%d step(s) before a loop of %d step(s)\n",dp[x][y]-1,step-dp[x][y]); return 0; } dp[x][y]=step; if(map[x][y]=='N') { step++; bfs(x-1,y); } if(map[x][y]=='S') { step++; bfs(x+1,y); } if(map[x][y]=='W') { step++; bfs(x,y-1); } if(map[x][y]=='E') { step++; bfs(x,y+1); } } int main() { int i,k; while(scanf("%d%d%d",&n,&m,&k),n||m||k) { for(i=0;i<n;i++) scanf("%s",map[i]); memset(dp,0,sizeof(dp)); step=1; bfs(0,k-1); } return 0; }