1、题目
https://leetcode-cn.com/problems/minesweeper/
2、题意
题解1:dfs
当前这个格子’E’若为’B’说明周围8个格子没有雷,继续搜索它其它八个格子为’E’的格子 (若为数字则说明有雷 则不用扩散)
class Solution {
public:
vector<vector<char>> updateBoard(vector<vector<char>>& board, vector<int>& click) {
if(board[click[0]][click[1]]=='M')
{
board[click[0]][click[1]] = 'X';
return board;
}
else
{
dfs(board,click[0],click[1]);
}
return board;
}
int dx[8] = {-1,-1,-1,0,0,1,1,1},dy[8] = {-1,0,1,-1,1,-1,0,1};
void dfs(vector<vector<char>>& board,int x,int y)
{
int m = board.size(),n = board[0].size();
if(board[x][y]=='E')
{
int cnt = 0;
for(int i=0;i<8;i++)
{
int x1 = x+dx[i],y1 = y+dy[i];
if(x1>=0&&x1<m&&y1>=0&&y1<n)
{
if(board[x1][y1]=='M')
cnt++;
}
}
if(cnt>0)
board[x][y] = '0'+cnt;
else
{
board[x][y] = 'B';
for(int i=0;i<8;i++)
{
int x1 = x+dx[i],y1 = y+dy[i];
if(x1>=0&&x1<m&&y1>=0&&y1<n&&board[x1][y1]=='E')
dfs(board,x1,y1);
}
}
}
}
};