Steward
分享是一種喜悅、更是一種幸福
程式語言 - LeetCode - C++ - 529. Minesweeper
題目:

解答:
class Solution {
public:
vector<vector<char>> updateBoard(vector<vector<char>>& board, vector<int>& click) {
int m = board.size();
int n = board[0].size();
int x0 = click[0];
int y0 = click[1];
vector<pair<int, int>> dir = {
{ -1, -1 }, { -1, 0 }, { -1, 1 },
{ 0, -1 }, { 0, 1 },
{ 1, -1 }, { 1, 0 }, { 1, 1 }
};
if (board[x0][y0] == 'M') {
board[x0][y0] = 'X';
return board;
}
auto dfs = [&](this auto&& dfs, int x, int y) {
if (x < 0 || x >= m || y < 0 || y >= n) {
return;
}
if (board[x][y] != 'E') {
return;
}
int mine = 0;
for (auto& [dx, dy] : dir) {
int nx = x + dx;
int ny = y + dy;
if (nx < 0 || nx >= m || ny < 0 || ny >= n) {
continue;
}
if (board[nx][ny] == 'M') {
mine += 1;
}
}
if (mine > 0) {
board[x][y] = mine + '0';
return;
}
board[x][y] = 'B';
for (auto& [dx, dy] : dir) {
dfs(x + dx, y + dy);
}
};
dfs(x0, y0);
return board;
}
};