Count Unguarded Cells in the Grid LeetCode solution in C++

1
class Solution {
2
public:
3
void dfs(vector<vector<int>> &grid, int x, int y, int m, int n, int dir) {
4
if (x < 0 || y < 0 || x >= m || y >= n) return;
5
if (grid[x][y] == 2 || grid[x][y] == 1) return;
6
grid[x][y] = 3;
7
if (dir == 1) {
8
dfs(grid, x + 1, y, m, n, dir);
9
} else if (dir == 2) {
10
dfs(grid, x, y + 1, m, n, dir);
11
} else if (dir == 3) {
12
dfs(grid, x - 1, y, m, n, dir);
13
} else {
14
dfs(grid, x, y - 1, m, n, dir);
15
}
16
}
17
int countUnguarded(int m, int n, vector<vector<int>> &guards, vector<vector<int>> &walls) {
18
vector<vector<int>> grid(m, vector<int>(n, 0));
19
// marking guards
20
for (int i = 0; i < guards.size(); i++) {
21
int x = guards[i][0];
22
int y = guards[i][1];
23
grid[x][y] = 1;
24
}
25
// marking walls
26
for (int i = 0; i < walls.size(); i++) {
27
int x = walls[i][0];
28
int y = walls[i][1];
29
grid[x][y] = 2;
30
}
31
// dfs in each of 4 directions
32
for (int i = 0; i < guards.size(); i++) {
33
int x = guards[i][0];
34
int y = guards[i][1];
35
dfs(grid, x + 1, y, m, n, 1);
36
dfs(grid, x, y + 1, m, n, 2);
37
dfs(grid, x - 1, y, m, n, 3);
38
dfs(grid, x, y - 1, m, n, 4);
39
}
40
long long int cnt = 0;
41
for (int i = 0; i < m; i++) {
42
for (int j = 0; j < n; j++) {
43
if (grid[i][j] == 0) cnt++;
44
}
45
}
46
return cnt;
47
}
48
};

0

WPM •0 •0

100%

ACC •0 •0

0s

TIME •0