LeetCode 529. 扫雷游戏 (BFS玩玩小游戏)

扫雷游戏

const int dx[] = {-1,0,1,0,-1,-1,1,1};
const int dy[] = {0,1,0,-1,1,-1,1,-1};
class Solution {
public:
    typedef pair<int,int> P;
    queue<P> q;
    bool vis[51][51] = {0};
    vector<vector<char>> updateBoard(vector<vector<char>>& board, vector<int>& click) {
        int x = click[0], y = click[1], m = board.size(), n = board[0].size();
        if(board[x][y] == 'M'){
            board[x][y] = 'X';
            return board;
        }
        if(board[x][y]=='E') q.push(make_pair(x,y));
        vis[x][y] = 1;
        while(q.size()){
            P p = q.front();
            q.pop();
            int x = p.first;
            int y = p.second;
            int cnt = 0;
            for(int k=0;k<8;k++){
                int nx = x+dx[k];
                int ny = y+dy[k];
                if(nx>=0 && nx<m && ny>=0 && ny<n){
                    if(board[nx][ny]=='M'){
                        cnt++;
                    }
                }
            }
            if(cnt==0){
                board[x][y] = 'B';
                for(int k=0;k<8;k++){
                    int nx = x+dx[k];
                    int ny = y+dy[k];
                    if(nx>=0 && nx<m && ny>=0 && ny<n){
                        if(board[nx][ny]=='E' && !vis[nx][ny]){
                            //注意打标记的时机
                            q.push(make_pair(nx,ny));
                            vis[nx][ny] = 1;
                        }
                    }
                }        

            }else{
                board[x][y] = char(cnt+'0');
            }
        }
        return board;
    }
};

猜你喜欢

转载自blog.csdn.net/qq_44846324/article/details/107641747
今日推荐