Surrounded Regions ,BFS

来源:互联网 发布:linux不显示电池 编辑:程序博客网 时间:2024/04/29 20:15

首先初始化queue为最外面一圈的'O'的位置,然后bfs,把所有能到达的'O'标记为'Z',这样剩余的'O'变成'X','Z'变成‘O’就行了

class Solution {

    struct point{
        int x,y;
        point(int a,int b):x(a),y(b){}
    };
public:
    void solve(vector<vector<char>> &board) {
        if(board.empty()||board.size()==0||board[0].size()==0)
            return;
        int m=board.size(),n=board[0].size();
        queue<point> queue;
        //初始化
        for(int i=0;i<n;i++){
            if(board[0][i]=='O'){
                board[0][i]='Z';
                queue.push(point(0,i));
            }
            if(board[m-1][i]=='O'){
                board[m-1][i]='Z';
                queue.push(point(m-1,i));
            }
        }
        
        for(int i=0;i<m;i++){
            if(board[i][0]=='O'){
                board[i][0]='Z';
                queue.push(point(i,0));
            }
            if(board[i][n-1]=='O'){
                board[i][n-1]='Z';
                queue.push(point(i,n-1));
            }
        }
        //BFS
        while(!queue.empty()){
            point p=queue.front();
            queue.pop();
            if(p.x>0&&board[p.x-1][p.y]=='O'){
                board[p.x-1][p.y]='Z';
                queue.push(point(p.x-1,p.y));
            }
            if(p.x<m-1&&board[p.x+1][p.y]=='O'){
                board[p.x+1][p.y]='Z';
                queue.push(point(p.x+1,p.y));
            }
            if(p.y>0&&board[p.x][p.y-1]=='O'){
                board[p.x][p.y-1]='Z';
                queue.push(point(p.x,p.y-1));
            }
            if(p.y<n-1&&board[p.x][p.y+1]=='O'){
                board[p.x][p.y+1]='Z';
                queue.push(point(p.x,p.y+1));
            }
        }
        
        for(int i=0;i<m;i++)
            for(int j=0;j<n;j++)
                board[i][j]=='Z'?board[i][j]='O':board[i][j]='X';
        return;
    }
};
0 0
原创粉丝点击