您的位置:首页 > 其它

ZOJ1056 The Worm Turns

2008-10-23 15:45 239 查看
题目大意:整个游戏棋盘是50*50大小的,左上角在(1,1),贪吃蛇由20个节点组成,头部位置在(25,30),水平延展到(25,11),可以有四个运动方向:东,西,南,北。题目就是给你一个运动序列,判断最终结果是下面3种情况的哪一种:1)正常。2)头撞到自己身体。3)出界。
#include <iostream>

#include <string>

using namespace std;

//贪吃蛇节点

struct WNode

{

int x;//行号

int y;//列号

};

int main()

{

string moves;//移动序列

WNode worm[20];//贪吃蛇

int n,i,j;

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

{

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

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

{

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

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

}

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

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

{

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

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

{

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

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

}

//移动头部

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

{//向北

worm[0].x -= 1;

}

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

{//向南

worm[0].x += 1;

}

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

{//向西

worm[0].y -= 1;

}

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

{//向东

worm[0].y += 1;

}

//判断是否出界

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

{

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

break;

}

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

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

{

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

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

{

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

break;

}

}

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

}

if(i==n)

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

}

return 0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: