191.   The Worm Turns


Time Limit: 1.0 Seconds   Memory Limit: 65536K Total Runs: 5465   Accepted Runs: 1774

Worm is an old computer game. There are many versions, but all involve maneuvering a "worm" around the screen, trying to avoid running the worm into itself or an obstacle.

We'll simulate a very simplified version here. The game will be played on a 50 x 50 board, numbered so that the square at the upper left is numbered (1, 1). The worm is initially a string of 20 connected squares. Connected squares are adjacent horizontally or vertically. The worm starts stretched out horizontally in positions (25, 11) through (25, 30), with the head of the worm at (25, 30). The worm can move either East (E), West (W), North (N) or South (S), but will never move back on itself. So, in the initial position, a W move is not possible. Thus the only two squares occupied by the worm that change in any move are its head and tail. Note that the head of the worm can move to the square just vacated by the worm's tail.

You will be given a series of moves and will simulate the moves until either the worm runs into itself, the worm runs off the board, or the worm successfully negotiates its list of moves. In the first two cases you should ignore the remaining moves in the list.

Input

There will be multiple problems instances. The input for each problem instance will be on two lines. The first line is an integer n (<100) indicating the number of moves to follow. (A value of n = 0 indicates end of input.) The next line contains n characters (either E, W, N or S), with no spaces separating the letters, indicating the sequence of moves.

Output

Generate one line of output for each problem instance. The output line should be one of the follow three:

The worm ran into itself on move m. The worm ran off the board on move m. The worm successfully made all m moves.

Where m is for you to determine and the first move is move 1.

Sample Input

18
NWWWWWWWWWWSESSSWS
20
SSSWWNENNNNNWWWWSSSS
30
EEEEEEEEEEEEEEEEEEEEEEEEEEEEEE
13
SWWWWWWWWWNEE
0

Sample Output

The worm successfully made all 18 moves.
The worm ran into itself on move 9.
The worm ran off the board on move 21.
The worm successfully made all 13 moves. 题目大意:整个游戏棋盘是50*50大小的,左上角在(1,1),贪吃蛇由20个节点组成,头部位置在(25,30),水平延展到(25,11),可以有四个运动方向:东,西,南,北。题目就是给你一个运动序列,判断最终结果是下面3种情况的哪一种:1)正常。2)头撞到自己身体。3)出界。 这是一题模拟题,简单的贪吃蛇游戏,实现一些基本的功能。
这题有注意点: (1) 头碰到尾时需要注意,即移动的时候先移尾部再移头部.
#include <iostream>

#include <string>

using namespace std;

//贪吃蛇节点

struct WNode

{

    int x;//行号

    int y;//列号

};

int main()

{

    string moves;//移动序列

    WNode worm[];//贪吃蛇

    int n,i,j;

    while(cin>>n&&n!=)

    {

        //从头部到尾部初始化贪吃蛇

        for(i=;i<;++i)

        {

            worm[i].x = ;//起始行在行

            worm[i].y = -i;//起始所在列

        }

        cin>>moves;//输入移动序列

        for (i=;i<n;++i)

        {

            //贪吃蛇中其他节点移动到前一个节点位置上

            for(j=;j>;--j)

            {

                worm[j].x=worm[j-].x;

                worm[j].y=worm[j-].y;

            }

            //移动头部

            if (moves[i]=='N')

            {//向北

                worm[].x -= ;

            }

            else if (moves[i]=='S')

            {//向南

                worm[].x += ;

            }

            else if (moves[i]=='W')

            {//向西

                worm[].y -= ;

            }

            else if (moves[i]=='E')

            {//向东

                worm[].y += ;

            }

            //判断是否出界

            if(worm[].x>||worm[].y>||worm[].x<||worm[].y<)

            {

                cout<<"The worm ran off the board on move "<<i+<<"."<<endl;

                break;

            }    

            //判断是否撞到自己身体了

            for(j=;j<;++j)

            {

                //头部节点撞到其他节点

                if(worm[].x==worm[j].x&&worm[].y==worm[j].y)

                {

                    cout<<"The worm ran into itself on move "<<i+<<"."<<endl;

                    break;

                }

            }

            if(j!=) break;//发生了碰撞,不能继续运动了

        }

        if(i==n) 

            cout<<"The worm successfully made all "<<n<<" moves."<<endl;

    }

    return ;

}

TOJ 1191. The Worm Turns的更多相关文章

  1. TJU ACM-ICPC Online Judge—1191 The Worm Turns

    B - The Worm Turns Time Limit:2000MS     Memory Limit:65536KB     64bit IO Format:%lld & %llu Su ...

  2. The Worm Turns

    The Worm Turns Time Limit: 8000/4000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Tota ...

  3. HDU 2782 The Worm Turns (DFS)

    Winston the Worm just woke up in a fresh rectangular patch of earth. The rectangular patch is divide ...

  4. ZOJ 1056 The Worm Turns

    原题链接 题目大意:贪吃蛇的简化版,给出一串操作命令,求蛇的最终状态是死是活. 解法:这条蛇一共20格的长度,所以用一个20个元素的队列表示,队列的每个元素是平面的坐标.每读入一条指令,判断其是否越界 ...

  5. 【HDOJ】2782 The Worm Turns

    DFS. /* 2782 */ #include <iostream> #include <queue> #include <cstdio> #include &l ...

  6. 杭电ACM分类

    杭电ACM分类: 1001 整数求和 水题1002 C语言实验题——两个数比较 水题1003 1.2.3.4.5... 简单题1004 渊子赛马 排序+贪心的方法归并1005 Hero In Maze ...

  7. POJ题目细究

    acm之pku题目分类 对ACM有兴趣的同学们可以看看 DP:  1011   NTA                 简单题  1013   Great Equipment     简单题  102 ...

  8. 【转】POJ百道水题列表

    以下是poj百道水题,新手可以考虑从这里刷起 搜索1002 Fire Net1004 Anagrams by Stack1005 Jugs1008 Gnome Tetravex1091 Knight ...

  9. 转载:hdu 题目分类 (侵删)

    转载:from http://blog.csdn.net/qq_28236309/article/details/47818349 基础题:1000.1001.1004.1005.1008.1012. ...

随机推荐

  1. redis笔记

    redis字符串 : 存储基本的一个键值对. redis哈希 : Redis的哈希值是字符串字段和字符串值之间的映射,所以他们是表示对象的完美数据类型. 一个哈希表可以存在多个键值对,可对键值进行增删 ...

  2. How to change hostname on SLE

    修改/etc/HOSTNAME文件,在此文件中保存主机名,例如: linuxserv1 然后运行命令设置主机名 # /etc/rc.d/boot.localnet start 方法3. 运行 sysc ...

  3. 判断ecshop未付款添加去付款按钮

    判断ecshop未付款添加去付款按钮,打开ecshop模板目录下user_transaction.dwt找到{$item.handler} 这个变量 给它下面添加以下代码 {if $item.pay_ ...

  4. Integer.toBinaryString()的源代码解析

    private static String toUnsignedString(int i, int shift) { char[] buf = new char[32];//i是要整形,这里得把它化成 ...

  5. VS2015 + Cordova Html5开发使用Crosswalk Web引擎

    CrossWalk引擎的好处是统一不同android设备的Html5的差异性,据说速度很快. Vs2015中使用非常简单,作为一个Apache Cordova的插件安装即可: Installing t ...

  6. 【详解】ERP、APS与MES系统是什么?

    ERP是什么?MES是什么?APS又是什么?无论他们有什么功能,对企业有什么意义,不过都是计算机在读写一些数据而已.实际上这一切的本质不过是数据在硬盘和内存中快速的读和写. ERP是--,APS是-- ...

  7. 下载VM12 虚拟机和安装kali

    为什么现在才写这个--  因为我在学校啊,学校的电脑还没有kali.好了我们开始. http://www.vmware.com/products/player/playerpro-evaluation ...

  8. struts---JSP界面验证码生成与验证

    之前想做一个随机验证码的功能,自己也搜索了一下别人写的代码,然后自己重新用struts2实现了一下,现在将我自己实现代码贴出来!大家有什么意见都可以指出来! 首先是生成随机验证码图片的action: ...

  9. 【皇甫】☀Spring开题中...

    spring (由Rod Johnson创建的一个开源框架)Spring是一个开源框架,Spring是于2003 年兴起的一个轻量级的Java 开发框架,由Rod Johnson创建.简单来说,Spr ...

  10. unrar.dll 使用实例

    /* * main.cpp * * Created on: Aug 17, 2015 * Author: smallcroco * * Discription: * 1 首先打开解压包,可以设置打开方 ...