您的位置:首页 > 其它

Leetcode -- Surrounded Regions

2015-10-26 18:35 375 查看
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 X
X O O X
X X O X
X O X X


After running your function, the board should be:
X X X X
X X X X
X X X X
X O X X


本题使用最基本的宽度优先搜索,以队列进行节点的扩展。

class Solution {
public:
int dif[4][2]={{0,-1},{0,1},{-1,0},{1,0}};
void dfs(vector<vector<char>>& board,pair<int,int> idx)
{
queue<pair<int,int>> que;
que.push(idx);
int n=board.size(),m=board[0].size();
board[idx.first][idx.second]='+';
while(!que.empty())
{
pair<int,int> cur = que.front();
que.pop();
int x = cur.first,y = cur.second;
for(int i=0;i<4;++i)
{
int xx = x+dif[i][0];
int yy = y+dif[i][1];
if(xx>=0&&xx<n&&yy>=0&&yy<m&&board[xx][yy]=='O')
{
board[xx][yy]='+';
que.push(make_pair(xx,yy));
}
}
}
}
void solve(vector<vector<char>>& board) {
int n=board.size();
if(n==0) return;
int m=board[0].size();
if(m==0) return;
for(int i=0;i<n;++i)
{
if(board[i][0]=='O') dfs(board,make_pair(i,0));
if(board[i][m-1]=='O') dfs(board,make_pair(i,m-1));
}
for(int i=0;i<m;++i)
{
if(board[0][i]=='O') dfs(board,make_pair(0,i));
if(board[n-1][i]=='O') dfs(board,make_pair(n-1,i));
}
for(int i=0;i<n;++i)
for(int j=0;j<m;++j)
{
if(board[i][j]=='O') board[i][j]='X';
else if(board[i][j]=='+') board[i][j]='O';
}
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: