原题链接:Leecode 529. 扫雷游戏
class Solution {
public:
vector<vector<int>> vis;
int x[8]={-1,-1,-1,1,1,1,0,0};
int y[8]={-1,0,1,-1,0,1,-1,1};
int fun(vector<vector<char>>& board,int i,int j)
{
int m=board.size(),n=board[0].size();
if(i<0 || i>m-1 || j<0 || j>n-1 ) return 0;
if(board[i][j]=='M') return 1;
return 0;
}
void dfs(vector<vector<char>>& board,int i,int j)
{
int m=board.size(),n=board[0].size();
if(i<0 || i>m-1 || j<0 || j>n-1 || vis[i][j] ) return ;
if(board[i][j]=='E')
{
vis[i][j]=1;
int sum=0;
for(int k=0;k<8;k++)
{
sum+=fun(board,i+x[k],j+y[k]);
}
if(sum) board[i][j]=sum+'0';
else
{
board[i][j]='B';
for(int k=0;k<8;k++)
{
dfs(board,i+x[k],j+y[k]);
}
}
}
}
vector<vector<char>> updateBoard(vector<vector<char>>& board, vector<int>& click) {
int m=board.size(),n=board[0].size();
vis=vector<vector<int>>(m,vector<int>(n));
int i=click[0],j=click[1];
if(board[i][j]=='M')
{
board[i][j]='X';
return board;
}
if(board[i][j]=='E')
{
dfs(board,i,j);
}
return board;
}
};