您的位置:首页 > 其它

【HDOJ】2414 Chessboard Dance

2015-03-09 10:25 323 查看
简单DFS。

/* 2414 */
#include <cstdio>
#include <cstring>
#include <cstdlib>

const int n = 8;
char map[10][10];
int x, y, d;
char dirs[5] = "^v<>";
int dir[4][2] = {
-1,0, 1,0, 0,-1, 0,1
};
int tdir[4][3] = {
2,3,1, 3,2,0, 1,0,3, 0,1,2
};

inline bool check(int x, int y) {
return x<0 || x>=n || y<0 || y>=n;
}

void dfs(int x, int y) {
int i, j, k;
int xx, yy;

xx = x + dir[d][0];
yy = y + dir[d][1];
if (check(xx, yy))
return ;
if (map[xx][yy] == '.') {
map[xx][yy] = map[x][y];
map[x][y] = '.';
} else {
dfs(xx, yy);
map[xx][yy] = map[x][y];
map[x][y] = '.';
}
}

int main() {
int i, j, k;
char cmd[10];
int xx, yy;

#ifndef ONLINE_JUDGE
freopen("data.in", "r", stdin);
freopen("data.out", "w", stdout);
#endif

while (scanf("%s", map[0]) != EOF) {
if (map[0][0]=='-' && map[0][1]=='-' && map[0][2]=='\0')
break;
for (i=1; i<8; ++i)
scanf("%s", map[i]);
for (i=0; i<8; ++i) {
for (j=0; j<8; ++j) {
if (map[i][j] == '^') {
x = i;
y = j;
d = 0;
} else if (map[i][j] == 'v') {
x = i;
y = j;
d = 1;
} else if (map[i][j] == '<') {
x = i;
y = j;
d = 2;
} else if (map[i][j] == '>') {
x = i;
y = j;
d = 3;
}
}
}
while (scanf("%s", cmd)!=EOF && cmd[0]!='#') {
if (cmd[0] == 'm') {
// move
scanf("%d", &k);
while (k--) {
xx = x + dir[d][0];
yy = y + dir[d][1];
if (check(xx, yy))
break;
dfs(x, y);
x = xx;
y = yy;
}
} else {
// turn
scanf("%s", cmd);
if (cmd[0] == 'l') {
d = tdir[d][0];
} else if (cmd[0] == 'r') {
d = tdir[d][1];
} else {
d = tdir[d][2];
}
}
}
map[x][y] = dirs[d];
for (i=0; i<8; ++i) {
map[i][8] = '\0';
puts(map[i]);
}
putchar('\n');
}

return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: