1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80
|
int n, m; int sx, sy, ex, ey; int q;
int len; int head, tail; int row[1024], col[1024]; int map[1024][1024];
bool flag = true;
void print_map(){ for(int i = 0; i < n; i++){ for(int j = 0; j < m; j++){ printf("%d", map[i][j]); } puts(""); } } void ipt(){ scanf("%d %d", &n, &m); scanf("%d %d %d %d", &sx, &sy, &ex, &ey); scanf("%d", &q);
int dx, dy; len = abs(ex - sx) + abs(ey - sy) + 1; head = 0, tail = len - 1; if(sx == ex) dx = 0, dy = (sy < ey ? 1 : -1); else dy = 0, dx = (sx < ex ? 1 : -1);
for(int i = 0; i < n; i++) for(int j = 0; j < m; j++){ map[i][j] = 0; } for(int i = 0, now_x = sx, now_y = sy; i < len; i++, now_x += dx, now_y += dy){ map[now_x][now_y] = 1; row[i] = now_x, col[i] = now_y; } }
bool is_valid(int x, int y){ return (x >= 0 && x < n && y >= 0 && y < m && map[x][y] == 0); }
void move(){ int d; scanf("%d", &d); int dx[] = {1, -1, 0, 0}, dy[] = {0, 0, 1, -1};
int tail_x = row[tail], tail_y = col[tail]; map[tail_x][tail_y] = 0; tail = tail > 0 ? tail - 1 : len - 1;
int head_x = row[head], head_y = col[head]; head_x += dx[d], head_y += dy[d]; if(is_valid(head_x, head_y)){ map[head_x][head_y] = 1; head = head > 0 ? head - 1 : len - 1; row[head] = head_x, col[head] = head_y; } else{ map[tail_x][tail_y] = 1; flag = false; } }
int main(){ ipt(); for(int i = 0; i < q && flag; i++){ move(); } print_map(); return 0; }
|