JOJ 1034 Worm Turns

JOJ 1034 Worm Turns

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 >
 4 using namespace std;
 5 struct point
 6 {
 7   int  row;
 8   int  col;
 9 };
10 int  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

你可能感兴趣的:(JOJ 1034 Worm Turns)