zoukankan      html  css  js  c++  java
  • poj1573 Robot Motion(模拟)

    题意:在r行c列的地图中,机器人从第一行的start列开始出发,N,S,W,E分别表示北南西东四个方向,问机器人走出地图需要多少步,如果走不出地图,输出走到形成环状的步数以及形成环状路线的总步数。

    思路:模拟机器人行走的过程,我是用了一个数组s存图,一个数组vis存步数,一开始地图上的步数都为0,当遇到步数不为0 的情况,说明形成了环状。

    #include <iostream>
    #include <cstdio>
    #include <cstring>
    
    using namespace std;
    
    const int maxn=1010;
    
    int n,m,k;
    char s[maxn][maxn];
    int vis[maxn][maxn];
    
    
    
    int main()
    {
        ios::sync_with_stdio(false);
        while(cin>>n>>m>>k&&(n!=0||m!=0||k!=0))
        {
            memset(s,0,sizeof(s));
            for(int i=1;i<=n;i++)
            {
                for(int j=1;j<=m;j++)
                    cin>>s[i][j];
            }
            memset(vis,0,sizeof(vis));
            int flag=-2;
            vis[1][k]=1;
            int x=1,y=k;
            while(1)
            {
                if(s[x][y]=='N')
                {
                    if(x-1<1)
                        flag=-1;
                    else if(vis[x-1][y]==0)
                    {
                        vis[x-1][y]=vis[x][y]+1;
                        x--;
                    }
                    else flag=vis[x-1][y];
                }
                if(s[x][y]=='S')
                {
                    if(x+1>n)
                        flag=-1;
                    else if(vis[x+1][y]==0)
                    {
                        vis[x+1][y]=vis[x][y]+1;
                        x++;
                    }
                    else flag=vis[x+1][y];
                }
                if(s[x][y]=='E')
                {
                    if(y+1>m)
                        flag=-1;
                    else if(vis[x][y+1]==0)
                    {
                        vis[x][y+1]=vis[x][y]+1;
                        y++;
                    }
                    else flag=vis[x][y+1];
                }
                if(s[x][y]=='W')
                {
                     if(y-1<1)
                        flag=-1;
                    else if(vis[x][y-1]==0)
                    {
                        vis[x][y-1]=vis[x][y]+1;
                        y--;
                    }
                    else flag=vis[x][y-1];
                }
                if(flag!=-2){
                    break;
                }
    
            }
            if(flag==-1)
            {
                printf("%d step(s) to exit
    ",vis[x][y]);
            }
            else printf("%d step(s) before a loop of %d step(s)
    ",flag-1,vis[x][y]-flag+1);
    
        }
        return 0;
    }
  • 相关阅读:
    SQL怎么随机提取出一条信息 mysql 获取随机记录
    css3 渐变 各浏览器兼容
    php的curl和socket的区别 转
    php获取本机真实IP地址
    SSH超时断开 ssh 老掉线
    php 获取远程服务器信息 get_headers 的使用
    如何删除右键菜单中的Catalyst(TM) Control Center选项
    多线程概念、案例!
    网络编程
    我的博客开通啦
  • 原文地址:https://www.cnblogs.com/Fy1999/p/9369239.html
Copyright © 2011-2022 走看看