天天看點

HDU1035 Robot Motion

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
const int maxn = 100;
char map[maxn][maxn];
int vis[maxn][maxn];
int main()
{
    int m,n,x;
    while(scanf("%d%d",&m,&n)&&m&&n){
        scanf("%d",&x);
        getchar();
        for(int i=0;i<m;i++){
                scanf("%s",map[i]);
            }
        memset(vis,0,sizeof(vis));
        int i=0,j=x-1;
        int step=0,loops=0;
         vis[i][j] = (++step);
        while(true){
            if(map[i][j] == 'N') { i-=1; if(vis[i][j]) loops = vis[i+1][j]-vis[i][j]+1; }
            else if(map[i][j] == 'S') { i+=1; if(vis[i][j]) loops = vis[i-1][j]-vis[i][j]+1; }
            else if(map[i][j] == 'E') { j+=1; if(vis[i][j]) loops = vis[i][j-1]-vis[i][j]+1; }
            else if(map[i][j] == 'W') { j-=1; if(vis[i][j]) loops = vis[i][j+1]-vis[i][j]+1; }
            if(vis[i][j]){
                printf("%d step(s) before a loop of %d step(s)\n",vis[i][j]-1,loops);
                break;
            }
            if(i<0 || j<0 || i>m-1 || j>n-1){
                printf("%d step(s) to exit\n",step);
                break;
            }
            vis[i][j] = (++step);
        }

    }
    return 0;
}