`
dato0123
  • 浏览: 915323 次
文章分类
社区版块
存档分类
最新评论

ZOJ1056 The Worm Turns

 
阅读更多

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

<!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> -->#include<iostream>
#include
<string>
usingnamespacestd;
//贪吃蛇节点
structWNode
{
intx;//行号
inty;//列号
};
intmain()
{
stringmoves;//移动序列
WNodeworm[20];//贪吃蛇
intn,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;
}
elseif(moves[i]=='S')
{
//向南
worm[0].x+=1;
}
elseif(moves[i]=='W')
{
//向西
worm[0].y-=1;
}
elseif(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
<<"Thewormranofftheboardonmove"<<i+1<<"."<<endl;
break;
}
//判断是否撞到自己身体了
for(j=1;j<20;++j)
{
//头部节点撞到其他节点
if(worm[0].x==worm[j].x&&worm[0].y==worm[j].y)
{
cout
<<"Thewormranintoitselfonmove"<<i+1<<"."<<endl;
break;
}
}
if(j!=20)break;//发生了碰撞,不能继续运动了
}
if(i==n)
cout
<<"Thewormsuccessfullymadeall"<<n<<"moves."<<endl;
}
return0;
}

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics