Minesweeper LeetCode solution in C++

1
class Solution {
2
public:
3
int m, n;
4
vector<vector<char>> updateBoard(vector<vector<char>> &board, vector<int> &click) {
5
if (board[click[0]][click[1]] == 'M') {
6
board[click[0]][click[1]] = 'X';
7
return board;
8
} else {
9
m = board.size(), n = board[0].size();
10
dfs(click[0], click[1], board);
11
}
12
return board;
13
}
14

15
const int dx[8] = {1, 0, -1, 0, 1, 1, -1, -1};
16
const int dy[8] = {0, -1, 0, 1, 1, -1, -1, 1};
17
void dfs(int cr, int cc, vector<vector<char>> &board) {
18
int count = 0;
19
for (int i = 0; i < 8; i++) {
20
int nr = cr + dx[i], nc = cc + dy[i];
21
if (nr < 0 || nr >= m || nc < 0 || nc >= n || board[nr][nc] != 'M') continue;
22
count++;
23
}
24

25
if (count != 0) {
26
board[cr][cc] = '0' + count;
27
return;
28
} else {
29
board[cr][cc] = 'B';
30
for (int i = 0; i < 8; i++) {
31
int nr = cr + dx[i], nc = cc + dy[i];
32
if (nr < 0 || nr >= m || nc < 0 || nc >= n || board[nr][nc] != 'E') continue;
33
dfs(nr, nc, board);
34
}
35
}
36
}
37
};

0

WPM •0 •0

100%

ACC •0 •0

0s

TIME •0