leetcode- Surrounded Regions

来源:互联网 发布:厦大网络继续教育学院 编辑:程序博客网 时间:2024/06/14 11:28

Given a 2D board containing 'X' and 'O', capture all regions surrounded by 'X'.

A region is captured by flipping all 'O's into 'X's in that surrounded region.

For example,

X X X XX O O XX X O XX O X X

After running your function, the board should be:

X X X XX X X XX X X XX O X X

分析:只要字母o所在位置与边缘位置的o相连,其值则不变,否则则转为x

class Solution {public:    void solve(vector<vector<char>> &board) {        int n = board.size();        if (n < 3) return;        int m = board[0].size();        if(m < 3)return;        vector<bool> visit(m, false);        vector<vector<bool>> v(n,visit);        queue<int> q;        for(int i = 0; i < n; i++)        {            if(board[i][0] == 'O')            {                q.push(i*m);                v[i][0] = true;            }                            if(board[i][m-1] == 'O')            {                q.push(i*m + m-1);                v[i][m-1] = true;            }        }        for(int j = 0; j < m; j++)        {            if(board[0][j] == 'O')            {                q.push(j);                v[0][j] = true;            }               if(board[n-1][j] == 'O')            {                q.push((n-1)*m+j);                v[n-1][j] = true;            }        }                while(!q.empty())        {            int t = q.front();            int i = t/m;            int j = t%m;                        if((i-1 > -1) && (board[i-1][j] == 'O') && (!v[i-1][j]))            {                q.push((i-1)*m+j);                v[i-1][j] = true;            }            if((j-1 > -1) && (board[i][j-1] == 'O') && (!v[i][j-1]))            {                q.push(i*m+j-1);                v[i][j-1] = true;            }            if((i+1 < n) && (board[i+1][j] == 'O') && (!v[i+1][j]))            {                q.push((i+1)*m+j);                v[i+1][j] = true;            }            if((j+1 < m) && (board[i][j+1] == 'O') && (!v[i][j+1]))            {                q.push(i*m+j+1);                v[i][j+1] = true;            }            q.pop();        }                for(int i = 0; i < n; i++)            for(int j = 0; j < m; j++)            {                if(board[i][j] == 'O' && v[i][j] == false)                {                    board[i][j] = 'X';                }            }        return;    }};


0 0