poj1573 Robot Motion

来源:互联网 发布:淘宝买摩托车 编辑:程序博客网 时间:2024/05/20 03:40

题目链接:http://poj.org/problem?id=1573
题意:给你一个机器人,给你一张n*m的地图(包括S,N,W,E),告诉你机器人起始位置x(1,x),然后机器人就走这个图,然后有两中情况,走出去了或者走进了循环,就是样例那两种情况,输出结果就对了
解析:模拟题,直接开个vis数组记录,直接模拟就是了

#include <iostream>#include <cstdio>#include <algorithm>#include <vector>#include <cstring>#include <queue>#include <cmath>#include <map>using namespace std;const int maxn = 1e5+100;const int inf = 0x7ffffff;char a[1005][1005];int vis[1005][1005];int main(void){    int n,m,x;    while(~scanf("%d %d",&n,&m))    {        if(n==0 && m==0)            break;        scanf("%d",&x);        for(int i=1;i<=n;i++)            scanf("%s",a[i]+1);        memset(vis,0,sizeof(vis));        for(int i=0;i<=m+1;i++)        {            vis[0][i] = -1;            vis[n+1][i] = -1;        }        for(int i=0;i<=n+1;i++)        {            vis[i][0] = -1;            vis[i][m+1] = -1;        }        int dx = 1,dy = x;        vis[dx][dy] = 1;        while(true)        {            int tx = dx,ty = dy;            if(a[dx][dy]=='S')                dx += 1;            else if(a[dx][dy]=='E')                dy += 1;            else if(a[dx][dy]=='W')                dy -= 1;            else                dx -= 1;            if(vis[dx][dy]!=0)            {                if(vis[dx][dy] == -1)                    printf("%d step(s) to exit\n",vis[tx][ty]);                else                {                    int ans1 = vis[tx][ty];                    int ans2 = vis[dx][dy];                    printf("%d step(s) before a loop of %d step(s)\n",ans2-1,ans1-ans2+1);                }                break;            }            vis[dx][dy] = vis[tx][ty]+1;        }    }    return 0;}
0 0