LeetCode-529扫雷游戏

题目链接
DFS或BFS按照题意搜一遍即可,需要注意的是按照游戏规则应该往8个方向进行搜索。

class Solution {
     
public:
    int dx[8] = {
     -1,-1,-1,1,1,1,0,0};
    int dy[8] = {
     1,0,-1,1,0,-1,1,-1};
    vector<vector<char>> updateBoard(vector<vector<char>>& board, vector<int>& click) {
     
        if(board[click[0]][click[1]] == 'M'){
     
            board[click[0]][click[1]] = 'X';
        }else{
     
            dfs(board, click[0], click[1]);
        }
        return board;
    }
    void dfs(vector<vector<char>>& board, int x, int y){
     
        int cnt = 0;
        for(int i = 0; i < 8; i ++){
     
            int xx = x + dx[i];
            int yy = y + dy[i];
            if(xx < 0 || xx >= board.size() || yy < 0 || yy >= board[0].size()) continue;
            if(board[xx][yy] == 'M') cnt ++;
        }
        if(cnt > 0){
     
            board[x][y] = cnt + '0';
        }else{
     
            board[x][y] = 'B';
            for(int i = 0; i < 8; i ++){
     
                int xx = x + dx[i];
                int yy = y + dy[i];
                if(xx < 0 || xx >= board.size() || yy < 0 || yy >= board[0].size()) continue;
                if(board[xx][yy] == 'E') dfs(board ,xx, yy);
            }
        }
    }
};

你可能感兴趣的:(每日一题,dfs)