2015/1/25
水題
#include<map>
#include<queue>
#include<stack>
#include<cmath>
#include<vector>
#include<climits>
#include<stdio.h>
#include<string.h>
#include<iostream>
#include<algorithm>
using namespace std;
typedef long long ll;
#define mod 10007
#define lson pos<<1,l,mid
#define sc(n) scanf("%d",&n)
#define rson pos<<1|1,mid+1,r
#define pr(n) printf("%d\n",n)
#define met(n,m) memset(n, m, sizeof(n))
#define F(x,y,i) for(int i = x;i > y; i--)
#define f(x,y,i) for(int i = x;i < y; i++)
#define ff(x,y,i) for(int i = x;i <= y; i++)
#define FF(x,y,i) for(int i = x;i >= y; i--)
const int N=100500;
const int inf = INT_MAX;
int Max(int a,int b)
{
return a>b?a:b;
}
int Min(int a,int b)
{
return a<b?a:b;
}
int cnt , ct, n , m;
char s[100][100];
int vis[100][100];
int tp[4][2]={
-1,0,
0,1,
1,0,
0,-1
};
int dfs(int x,int y)
{
if(x<0||x>=n||y<0||y>=m)
{
printf("%d step(s) to exit\n",cnt);
return 0;
}
if(vis[x][y])
{
vis[x][y] = 0;
return 1;
}
int temp;
cnt++;
if(s[x][y] == 'N')temp = 0;
if(s[x][y] == 'E')temp = 1;
if(s[x][y] == 'S')temp = 2;
if(s[x][y] == 'W')temp = 3;
vis[x][y]= 1;
if(dfs(x+tp[temp][0],y+tp[temp][1]))
{
return 1;
}
return 0;
}
void Dfs(int x,int y)
{
if(!vis[x][y])
{
printf("%d step(s) before a loop of %d step(s)\n",ct,cnt-ct);
return ;
}
int temp;
ct++;
if(s[x][y] == 'N')temp = 0;
if(s[x][y] == 'E')temp = 1;
if(s[x][y] == 'S')temp = 2;
if(s[x][y] == 'W')temp = 3;
Dfs(x+tp[temp][0],y+tp[temp][1]);
}
int main()
{
int tot, x, d;
while(scanf("%d%d%d",&n,&m,&d)!=EOF)
{
if(n==0&&m==0&&d==0)break;
met(vis,0);
ct = cnt = 0;
f(0,n,i)
{
scanf("%s",s[i]);
}
if(dfs(0,d-1))
{
Dfs(0,d-1);
}
}
return 0;
}