poj1573 Robot Motion

74 篇文章 0 订阅
54 篇文章 0 订阅

题目链接: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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值