-
Notifications
You must be signed in to change notification settings - Fork 0
/
14503.cpp
47 lines (42 loc) · 940 Bytes
/
14503.cpp
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
#include<cstdio>
using namespace std;
int n, m, r, c, d;
int dir_cnt, cnt;
int turnDir[4] = { 3, 0 ,1, 2 };
int dx[4] = { -1, 0, 1, 0 };
int dy[4] = { 0, -1, 0, 1 };
int room[50][50];
void clean(int x, int y, int dir) {
if (room[y][x] == 1) return;
if (room[y][x] == 0) {
dir_cnt = 0;
room[y][x] = 2;
cnt++;
}
int nx = x + dx[dir];
int ny = y + dy[dir];
int bx = x + dx[turnDir[dir]];
int by = y + dy[turnDir[dir]];
if (room[ny][nx] == 0) clean(nx, ny, turnDir[dir]);
else if (dir_cnt < 4 && room[ny][nx] != 0) {
dir_cnt++;
clean(x, y, turnDir[dir]);
}
else if (dir_cnt == 4 && room[by][bx] != 1) {
dir_cnt = 0;
clean(bx, by, dir);
}
else if (dir_cnt == 4 && room[by][bx] == 1) return;
}
int main() {
scanf("%d %d", &n, &m);
scanf("%d %d %d", &r, &c, &d);
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
scanf("%d", &room[i][j]);
}
}
clean(c, r, d);
printf("%d\n", cnt);
return 0;
}