关键:八个方向的点要弄清楚。
使用dfs。
class Solution {
vector<pair<int,int>> link = {{-1,-1},{-1,0},{-1,1},{0,-1},{0,1},{1,-1},{1,0},{1,1}};
int getMineNum(vector<vector<char>>& board, int i, int j, int m,int n, char c){
int ret = 0;
for(auto d:link){
int x = i+d.first;
int y = j+d.second;
if(x >=0 && x < m && y >=0 && y < n) {
if(board[x][y] == c)
ret++;
}
}
return ret;
}
void dfs(vector<vector<char>>& board,int i, int j, int m, int n) {
if(i<0 || i>=m || j<0 || j>=n )
return;
if(board[i][j] != 'E')
return;
int num = getMineNum(board,i,j,m,n,'M');
if(num > 0)
board[i][j] = '0' + num;
else
board[i][j] = 'B';
if(board[i][j] != 'B')
return;
for(auto d:link){
dfs(board,i+d.first,j+d.second,m,n);
}
}
public:
vector<vector<char>> updateBoard(vector<vector<char>>& board, vector<int>& click) {
int m = board.size();
if(m == 0) return board;
int n = board[0].size();
int x = click[0];
int y = click[1];
if(board[x][y] == 'M') {
board[x][y] = 'X';
return board;
} else if(board[x][y] == 'E') {
dfs(board,x,y,m,n);
}
return board;
}
};