【HDOJ】2414 Chessboard Dance

简单DFS。

  1 /* 2414 */
  2 #include <cstdio>
  3 #include <cstring>
  4 #include <cstdlib>
  5 
  6 const int n = 8;
  7 char map[10][10];
  8 int x, y, d;
  9 char dirs[5] = "^v<>";
 10 int dir[4][2] = {
 11     -1,0, 1,0, 0,-1, 0,1
 12 };
 13 int tdir[4][3] = {
 14     2,3,1, 3,2,0, 1,0,3, 0,1,2
 15 };
 16 
 17 inline bool check(int x, int y) {
 18     return x<0 || x>=n || y<0 || y>=n;
 19 }
 20 
 21 void dfs(int x, int y) {
 22     int i, j, k;
 23     int xx, yy;
 24 
 25     xx = x + dir[d][0];
 26     yy = y + dir[d][1];
 27     if (check(xx, yy))
 28         return ;
 29     if (map[xx][yy] == '.') {
 30         map[xx][yy] = map[x][y];
 31         map[x][y] = '.';
 32     } else {
 33         dfs(xx, yy);
 34         map[xx][yy] = map[x][y];
 35         map[x][y] = '.';
 36     }
 37 }
 38 
 39 int main() {
 40     int i, j, k;
 41     char cmd[10];
 42     int xx, yy;
 43 
 44     #ifndef ONLINE_JUDGE
 45         freopen("data.in", "r", stdin);
 46         freopen("data.out", "w", stdout);
 47     #endif
 48 
 49     while (scanf("%s", map[0]) != EOF) {
 50         if (map[0][0]=='-' && map[0][1]=='-' && map[0][2]=='')
 51             break;
 52         for (i=1; i<8; ++i)
 53             scanf("%s", map[i]);
 54         for (i=0; i<8; ++i) {
 55             for (j=0; j<8; ++j) {
 56                 if (map[i][j] == '^') {
 57                     x = i;
 58                     y = j;
 59                     d = 0;
 60                 } else if (map[i][j] == 'v') {
 61                     x = i;
 62                     y = j;
 63                     d = 1;
 64                 } else if (map[i][j] == '<') {
 65                     x = i;
 66                     y = j;
 67                     d = 2;
 68                 } else if (map[i][j] == '>') {
 69                     x = i;
 70                     y = j;
 71                     d = 3;
 72                 }
 73             }
 74         }
 75         while (scanf("%s", cmd)!=EOF && cmd[0]!='#') {
 76             if (cmd[0] == 'm') {
 77                 // move
 78                 scanf("%d", &k);
 79                 while (k--) {
 80                     xx = x + dir[d][0];
 81                     yy = y + dir[d][1];
 82                     if (check(xx, yy))
 83                         break;
 84                     dfs(x, y);
 85                     x = xx;
 86                     y = yy;
 87                 }
 88             } else {
 89                 // turn
 90                 scanf("%s", cmd);
 91                 if (cmd[0] == 'l') {
 92                     d = tdir[d][0];
 93                 } else if (cmd[0] == 'r') {
 94                     d = tdir[d][1];
 95                 } else {
 96                     d = tdir[d][2];
 97                 }
 98             }
 99         }
100         map[x][y] = dirs[d];
101         for (i=0; i<8; ++i) {
102             map[i][8] = '';
103             puts(map[i]);
104         }
105         putchar('
');
106     }
107 
108     return 0;
109 }
原文地址:https://www.cnblogs.com/bombe1013/p/4322930.html