poj1573模拟

Robot Motion

Time Limit: 1000 MS Memory Limit: 10000 KB

64-bit integer IO format: %I64d , %I64u Java class name: Main

[Submit] [Status] [Discuss]

Description


A robot has been programmed to follow the instructions in its path.
Instructions for the next direction the robot is to move are laid down
in a grid. The possible instructions are

N north (up the page)

S south (down the page)

E east (to the right on the page)

W west (to the left on the page)

For example, suppose the robot starts on the north (top) side of
Grid 1 and starts south (down). The path the robot follows is shown. The
robot goes through 10 instructions in the grid before leaving the grid.

Compare what happens in Grid 2: the robot goes through 3
instructions only once, and then starts a loop through 8 instructions,
and never exits.

You are to write a program that determines how long it takes a robot to get out of the grid or how the robot loops around.

Input

There will be one or more grids for robots to
navigate. The data for each is in the following form. On the first line
are three integers separated by blanks: the number of rows in the grid,
the number of columns in the grid, and the number of the column in which
the robot enters from the north. The possible entry columns are
numbered starting with one at the left. Then come the rows of the
direction instructions. Each grid will have at least one and at most 10
rows and columns of instructions. The lines of instructions contain only
the characters N, S, E, or W with no blanks. The end of input is
indicated by a row containing 0 0 0.

Output

For each grid in the input there is one line of
output. Either the robot follows a certain number of instructions and
exits the grid on any one the four sides or else the robot follows the
instructions on a certain number of locations once, and then the
instructions on some number of locations repeatedly. The sample input
below corresponds to the two grids above and illustrates the two forms
of output. The word "step" is always immediately followed by "(s)"
whether or not the number before it is 1.

Sample Input

3 6 5
NEESWE
WWWESS
SNWWWW
4 5 1
SESWE
EESNW
NWEEN
EWSEN
0 0 0

Sample Output

10 step(s) to exit
3 step(s) before a loop of 8 step(s)
#include<iostream>
#include <string.h>

using namespace std;

int main(void)
{
    int row,col,entry;
    char grid[12][12];     //在规定大小的grid外部至少再定义一圈"门槛"以判断Robot是否离开了grid  (最大grid为10x10)

    for(;;)
    {
        memset(grid,‘O‘,sizeof(grid));     // ‘O‘ 为大写字母O,意为 Out

        /*Input*/

        int i,j;

        cin>>row>>col>>entry;
        if(!(row && col && entry))break;

        for(i=1;i<=row;i++)
            for(j=1;j<=col;j++)
                cin>>grid[i][j];

            /*Judge Robot get out of the grid or starts a loop in the grid*/

            int flag[12][12]={0};   //标记Robot经过某点的次数,当有一点为2则说明Robot陷入了以该点为loop起始点的循环
            int count;
            int r=1;
            int c=entry;
            for(count=0;;count++)
            {
                flag[r][c]++;  //注意顺序,先标记,再位移
                if(grid[r][c]==‘N‘)        // ↑
                    r--;
                else if(grid[r][c]==‘S‘)   // ↓
                    r++;
                else if(grid[r][c]==‘W‘)   // ←
                    c--;
                else if(grid[r][c]==‘E‘)   // →
                    c++;
                else if(grid[r][c]==‘O‘)        // Out
                {
                    cout<<count<<" step(s) to exit"<<endl;
                    break;
                }

                if(flag[r][c]==2)         //loop
                {
                    row=r;           //标记Robot循环起止点
                    col=c;
                    int flg=1;
                    for(r=1,c=entry,count=0;;count++)
                    {
                        if(r==row && c==col && flg==1)  //注意顺序,先寻找循环点再位移(避免Robot刚进入grid就陷入了循环的情况)
                        {
                            cout<<count<<" step(s) before a loop of ";        //输出进入循环前的步数
                            count=0;
                            flg++;
                        }
                        if(r==row && c==col && count!=0 && flg==2)
                        {
                            cout<<count<<" step(s)"<<endl;              //输出循环步数
                            break;
                        }
                        if(grid[r][c]==‘N‘)        // ↑
                            r--;
                        else if(grid[r][c]==‘S‘)   // ↓
                            r++;
                        else if(grid[r][c]==‘W‘)   // ←
                            c--;
                        else if(grid[r][c]==‘E‘)   // →
                            c++;
                    }
                    break;    //跳出count的for循环,不是跳出if(当然break也不能用于跳出if,这里的说明是为了避免误解)
                }
            }
    }
    return 0;
}

题意:按照表格的提示走~~~

模拟模拟  太恶心啦

http://blog.csdn.net/lyy289065406/article/details/6645434

他的博客真心棒!!!!!

poj1573模拟

时间: 2024-10-12 04:29:17

poj1573模拟的相关文章

poj1573 模拟

Robot Motion Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 11270   Accepted: 5487 Description A robot has been programmed to follow the instructions in its path. Instructions for the next direction the robot is to move are laid down in

poj1573&amp;&amp;hdu1035 Robot Motion(模拟题)

转载请注明出处:http://blog.csdn.net/u012860063?viewmode=contents 题目链接: HDU:http://acm.hdu.edu.cn/showproblem.php?pid=1035 POJ:   http://poj.org/problem?id=1573 Description A robot has been programmed to follow the instructions in its path. Instructions for

poj1573 Robot Motion

题目链接: http://poj.org/problem?id=1573 题目: Robot Motion Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 10202   Accepted: 4971 Description A robot has been programmed to follow the instructions in its path. Instructions for the next direct

POJ1573——Robot Motion

Robot Motion Description A robot has been programmed to follow the instructions in its path. Instructions for the next direction the robot is to move are laid down in a grid. The possible instructions are N north (up the page) S south (down the page)

CentOS系统启动及内核大破坏模拟实验

讲过了centos的启动流程,此时是不是想来点破坏呢?那就尽情的玩耍吧,记得在实验之前拍个快照,万一哪个环节错误恢复不回来了呢,毕竟数据无价,话不多说,开始. 一.删除伪系统根.(ramdisk文件) (1)模拟误操作删除ramdisk文件. ①模拟误删除initramfs-3.10.0-514.el7.x86_64.img文件. ②为当前正在使用的内核重新制作ramdisk文件 格式为:mkinitrd /boot/initramfs-$(uname -r).img $(uname -r) (

NYOJ 2356: 哈希计划【模拟】

题目描述 众所周知,LLM的算法之所以菜,就是因为成天打游戏,最近LLM突然想玩<金庸群侠传X>,结果进去后各种被虐,LLM就开始研究这个游戏的代码,顺便还学会了一点点点点lua语言,然后就开始了伟大的改游戏代码之旅,然后LLM发现自己too young了,这个游戏把所有的文本都进行了哈希,如果自己改了代码或者剧情文本的话它哈希出来的值就会和原来的哈希值不一样......然后游戏就会打不开.....,现在LLM发现了文本的哈希函数,要求你写个程序,功能为: 输入一段字符串,输出一个哈希值 为了

爬虫——模拟点击动态页面

动态页面的模拟点击: 以斗鱼直播为例:http://www.douyu.com/directory/all 爬取每页的房间名.直播类型.主播名称.在线人数等数据,然后模拟点击下一页,继续爬取 #!/usr/bin/python3 # -*- conding:utf-8 -*- __author__ = 'mayi' """ 动态页面的模拟点击: 模拟点击斗鱼直播:http://www.douyu.com/directory/all 爬取每页房间名.直播类型.主播名称.在线人数

爬虫——网站模拟登录

使用Selenium与PhantomJS模拟登录豆瓣:https://www.douban.com/ #!/usr/bin/python3 # -*- conding:utf-8 -*- __author__ = 'mayi' """ 模拟登录豆瓣:https://www.douban.com/ """ from selenium import webdriver # 调用环境变量指定的PhantomJS浏览器创建浏览器对象,executable

python爬虫 模拟登陆校园网-初级

最近跟同学学习爬虫的时候看到网上有个帖子,好像是山大校园网不稳定,用py做了个模拟登陆很有趣,于是我走上了一条不归路..... 先上一张校园网截图 首先弄清一下模拟登陆的原理: 1:服务器判定浏览器登录使用浏览器标识,需要模拟登陆 2: 需要post账号,密码,以及学校id python走起,我用的2.7版本,用notepad++写的,绑定python可以直接运行 由于是模拟网页登陆,需要导入urllib urllib2 cookielib库,前两个有与网页直接的接口,cookielib就是用来