#include <iostream>
#include <stdio.h>
using namespace std;
int main()
{ char grid[12][12];
int trace[12][12];
int m,n,k,c1,c2,i,j,ju,step,loop;
cin>>m>>n>>k;
while (m+n+k!=0)
{
ju=0;
for (i=1;i<=m;i++)
for (j=1;j<=n;j++) cin>>grid[i][j];
for (i=0;i<=m+1;i++)
for (j=0;j<=n+1;j++) trace[i][j]=2;//边界一圈初始为2
for (i=1;i<=m;i++)
for (j=1;j<=n;j++) trace[i][j]=0;
i=1;j=k;c1=1;c2=k;
do
{
trace[i][j]++;
int p,q;
if (trace[i][j]==3) {ju=1;c1=i;c2=j;break;} //加到三说明成环了或者走出去了
if (grid[i][j]=='S') c1=i+1;
if (grid[i][j]=='N') c1=i-1;
if (grid[i][j]=='W') c2=j-1;
if (grid[i][j]=='E') c2=j+1;
i=c1;j=c2;
}while (ju==0);
if ((c1==0)||(c1==m+1)||(c2==0)||(c2==n+1))
{
step=0;
for (i=1;i<=m;i++)
for (j=1;j<=n;j++)
if (trace[i][j]==1) step++;
cout<<step<<" step(s) to exit"<<endl;
}
else
{
step=0,loop=0;
for (i=1;i<=m;i++)
for (j=1;j<=n;j++)
{
if (trace[i][j]==1) step++;
if (trace[i][j]>1) loop++;
}
cout<<step<<" step(s) before a loop of "<<loop<<" step(s) "<<endl;
}
cin>>m>>n>>k;
}
return 0;
}
题目大意:给定一个由SNWE几个字母组成的地图,这四个字母代表着四个方向,给定起点,让你判断是否能走出这个地图,或走到某步的时候形成一个环