宽搜
#include<cstdio>
#include<iostream>
#include<cstring>
#include<queue>
using namespace std;
struct Node
{
int x;
int y;
};
int n,m,sx,sy;
char map[20][20];
int vis[20][20];
int step[20][20];
void bfs()
{
Node start,temp1,temp2;
queue<Node> q;
start.x=sx;
start.y=sy;
q.push(start);
memset(vis,0,sizeof(vis));
memset(step,0,sizeof(step));
vis[sx][sy]=1;
step[sx][sy]=0;
while(!q.empty())
{
temp1=q.front();
q.pop();
if(map[temp1.x][temp1.y]=='W')
{
temp2.y=temp1.y-1;
temp2.x=temp1.x;
}
else
{
if(map[temp1.x][temp1.y]=='E')
{
temp2.y=temp1.y+1;
temp2.x=temp1.x;
}
else
{
if(map[temp1.x][temp1.y]=='S')
{
temp2.y=temp1.y;
temp2.x=temp1.x+1;
}
else
{
temp2.y=temp1.y;
temp2.x=temp1.x-1;
}
}
}
if(temp2.x<0||temp2.x==n||temp2.y<0||temp2.y==m)
{
printf("%d step(s) to exit\n",step[temp1.x][temp1.y]+1);
return ;
}
if(vis[temp2.x][temp2.y])
{
printf("%d step(s) before a loop of %d step(s)\n",step[temp2.x][temp2.y],step[temp1.x][temp1.y]-step[temp2.x][temp2.y]+1);
return;
}
step[temp2.x][temp2.y]=step[temp1.x][temp1.y]+1;
vis[temp2.x][temp2.y]=1;
q.push(temp2);
}
}
int main()
{
int i;
while(cin>>n>>m&&n+m)
{
cin>>sy;
sy--;
sx=0;
for(i=0;i<n;i++)
cin>>map[i];
bfs();
}
return 0;
}