zoukankan      html  css  js  c++  java
  • 【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 }
  • 相关阅读:
    方法
    成员变量和局部变量
    带参数的方法
    包名规范
    String
    导包
    java基础(十二章)
    java基础(十一章)
    java基础(九章)
    java基础(八章)
  • 原文地址:https://www.cnblogs.com/bombe1013/p/4322930.html
Copyright © 2011-2022 走看看