您的位置:首页 > 其它

[LeetCode]Surrounded Regions

2014-03-09 13:41 399 查看
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 dir[4][2] = {{0,1},{0,-1},{1,0},{-1,0}};
void solveUtil(vector<vector<char> >& board, vector<vector<bool> >& visited, int ix, int iy, vector<pair<int,int> >& curPath, bool& isSurrounded)
{
int n = board.size();
int m = board[0].size();
queue<pair<int,int> > posQ;
posQ.push(pair<int,int>(ix, iy));
while(!posQ.empty())
{
int curX = posQ.front().first;
int curY = posQ.front().second;
posQ.pop();

if(board[curX][curY] == 'O' && !visited[curX][curY])
{
curPath.push_back(pair<int,int>(curX, curY));
visited[curX][curY] = true;
for(int k = 0; k < 4; ++k)
{
int newX = curX+dir[k][0];
int newY = curY+dir[k][1];
if(newX < 0 || newX >= n || newY < 0 || newY >= m) isSurrounded = false;
else if (!visited[newX][newY]) posQ.push(pair<int,int>(newX, newY));
}

}
}

}
void solve(vector<vector<char>> &board) {
// Start typing your C/C++ solution below
// DO NOT write int main() function
int n = board.size();
if(n == 0) return;
int m = board[0].size();

vector<vector<bool> > visited(n, vector<bool>(m, false));
for(int i = 0; i < n; ++i)
{
for(int j = 0; j < m; ++j)
{
vector<pair<int, int> > curPath;
bool isSurrounded = true;
if(!visited[i][j]) solveUtil(board, visited, i, j, curPath, isSurrounded);
if(isSurrounded)
{
for(int i = 0; i < curPath.size(); ++i)
board[curPath[i].first][curPath[i].second] = 'X';
}
}
}

}
};


  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: