【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]=='\0') 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] = '\0'; 103 puts(map[i]); 104 } 105 putchar('\n'); 106 } 107 108 return 0; 109 }