yoyouhappy的秘密花园
欢迎来到我的秘密花园^^
posts - 16,comments - 33,trackbacks - 0

WA了一次,最后发现竟然是多次计算时没给result赋初值,改了以后就AC了~

题目是写一个超简化版的贪吃蛇,在50*50的矩阵中,起始位置是蛇头位于的(25,30),蛇尾在(25,11),蛇占20个格。蛇可以向E W N S四个方向移动,当然不能反向移动,也不能撞倒自己或者撞倒墙.

输入多组case,每组是一串字符,表示每次的移动方向.
输出是否能完成这些移动,如果不能,就判断是在第几次移动时撞倒自己还是墙.

我的思路是  在矩阵中,将蛇占据的位置用1标记,将蛇头到蛇尾的20个坐标存入一个vector,然后每次移动,先判断是否撞倒墙,如果没撞倒墙,就先将蛇尾删除,将旧蛇头的位置置0(新蛇头可以是旧蛇尾 ),再将新的蛇头存入vector,判断新的蛇头所在的位置是否为0,若为被占据,则置1,继续移动.


觉得自己写得很冗余,开始时只记录了蛇头和蛇尾的坐标,以为根据蛇头移动就可以判断蛇尾的移动,写着写着就发现问题了,临时加了个vector来存蛇的坐标,所以程序有点乱,也只有这样了,以后再改改吧~


我的AC代码:

 1#include<iostream>
 2#include<vector>
 3#include<string>
 4using namespace std;
 5struct point
 6{
 7 int row;
 8 int col;
 9};
10int main()
11{
12    int i,j,n,index,result=1;
13 string moves;
14 char move;
15 point p;
16 vector<point>v;
17 while(1)
18 {
19  result=1;
20  cin>>n;
21  if(n==0)break;
22
23  int s[50][50]={0};
24        int fristr=24,fristc=29,lastr=24,lastc=10;
25  cin>>moves;
26  for(j=10;j<30;j++)
27  {
28   s[24][j]=1;
29   p.row=24;
30   p.col=j;
31   v.push_back(p);
32  }
33  for(index=0;index<n;index++)
34  {
35   move=moves[index];
36   if(move=='E')++fristc;
37   if(move=='W')--fristc;
38   if(move=='N')--fristr;
39   if(move=='S')++fristr;
40   if(fristr*(fristr-49)>0||fristc*(fristc-49)>0)
41   {
42    cout<<"The worm ran off the board on move "<<index+1<<"."<<endl;
43    result=0;
44    break;
45   }
46   v.erase(v.begin());
47   p.row=fristr;
48   p.col=fristc;
49   v.push_back(p);
50   s[lastr][lastc]=0;
51   lastr=v[0].row;
52   lastc=v[0].col;
53   if(s[fristr][fristc])
54   {
55    cout<<"The worm ran into itself on move "<<index+1<<"."<<endl;
56    result=0;
57    break;
58   }
59   s[fristr][fristc]=1;
60  }
61  if(result)printf("The worm successfully made all %d moves.\n", n);
62  v.clear();
63  getchar()
64 }
65}
66
posted on 2007-08-17 08:48 yoyouhappy 阅读(935) 评论(4)  编辑 收藏 引用 所属分类: yoyo的解题报告acm/icpc

FeedBack:
# re: JOJ 1034 Worm Turns
2007-08-17 14:01 | tb
蛇头如果与身体相撞 必然会形成一个矩形。可以根据输入的字符串判断出来。
但是在开始的时候(前20步)是个需要特别处理的情况  回复  更多评论
  
# re: JOJ 1034 Worm Turns
2007-08-17 14:06 | tb
再想了一下 不一定是矩形 但是在 东西 和 南北 方向上的位 肯定是0   回复  更多评论
  
# re: JOJ 1034 Worm Turns
2007-08-17 14:09 | tb
可以把输入分为两部分 一个只有南北 一个只有东西 (保持顺序)然后看位移是不是0
  回复  更多评论
  
# re: JOJ 1034 Worm Turns
2007-08-18 10:36 | yoyouhappy
@tb
不太明白你的意思。。。。
位移为什么会是0呢,谁的位移为0?我有点糊涂了  回复  更多评论
  

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   博问   Chat2DB   管理


Priceline Travel
Priceline Travel