Check if There is a Valid Path in a Grid LeetCode solution in C++

1
class Solution {
2
int n, m;
3
bool vis[305][305];
4
vector<vector<int>> g;
5

6
public:
7
bool hasValidPath(vector<vector<int>> &grid) {
8
n = grid.size();
9
m = grid[0].size();
10
g = grid;
11
memset(vis, false, sizeof(vis));
12
dfs(0, 0);
13
return vis[n - 1][m - 1];
14
}
15

16
void dfs(int ux, int uy) {
17
vis[ux][uy] = true;
18
int vx, vy;
19

20
if (g[ux][uy] == 1 || g[ux][uy] == 4 || g[ux][uy] == 6) {
21
vx = ux, vy = uy + 1;
22
if (valid(vx, vy) && L_enter(vx, vy)) dfs(vx, vy);
23
}
24
if (g[ux][uy] == 1 || g[ux][uy] == 3 || g[ux][uy] == 5) {
25
vx = ux, vy = uy - 1;
26
if (valid(vx, vy) && R_enter(vx, vy)) dfs(vx, vy);
27
}
28
if (g[ux][uy] == 2 || g[ux][uy] == 3 || g[ux][uy] == 4) {
29
vx = ux + 1, vy = uy;
30
if (valid(vx, vy) && D_enter(vx, vy)) dfs(vx, vy);
31
}
32
if (g[ux][uy] == 2 || g[ux][uy] == 5 || g[ux][uy] == 6) {
33
vx = ux - 1, vy = uy;
34
if (valid(vx, vy) && U_enter(vx, vy)) dfs(vx, vy);
35
}
36
}
37
bool valid(int x, int y) {
38
if (x >= 0 && y >= 0 && x < n && y < m && !vis[x][y]) return true;
39
return false;
40
}
41
bool L_enter(int x, int y) {
42
if (g[x][y] % 2) return true;
43
return false;
44
}
45
bool R_enter(int x, int y) {
46
if (g[x][y] == 1 || g[x][y] == 4 || g[x][y] == 6) return true;
47
return false;
48
}
49
bool D_enter(int x, int y) {
50
if (g[x][y] == 2 || g[x][y] == 5 || g[x][y] == 6) return true;
51
return false;
52
}
53
bool U_enter(int x, int y) {
54
if (g[x][y] == 2 || g[x][y] == 3 || g[x][y] == 4) return true;
55
return false;
56
}
57
};

0

WPM •0 •0

100%

ACC •0 •0

0s

TIME •0