您的位置:首页 > 其它

[LeetCode] 130. Surrounded Regions

2016-09-04 15:10 381 查看
思路1:

BFS. 从四条边找’O’, 找到’O’以后把他们和他们连接的’O’都改成别的字母, 然后都改完以后把剩下的’O’都换成’X’, 再把刚才别的字母换回’O’即可.

思路2:

DFS. 思路做法大同小异, 就是为了不超时, 要减少dfs次数, 就避免从内部又去矩阵边缘找.

void bfs(vector<vector<char>>& board, int row, int col) {
int h = board.size();
int w = board[0].size();
queue<pair<int, int>> q;
q.push(make_pair(row, col));
int pos[][2] = {-1, 0, 0, -1, 1, 0, 0, 1};

while (! q.empty()) {
pair<int, int> cur = q.front();
q.pop();
int i = cur.first;
int j = cur.second;
if (i >= 0 && i < h && j >= 0 && j < w && board[i][j] == 'O') {
board[i][j] = '.';
for (int k = 0; k < 4; k++) {
int newRow = i + pos[k][0];
int newCol = j + pos[k][1];
q.push(make_pair(newRow, newCol));
}
}
}
}

void solve(vector<vector<char>>& board) {
int h = board.size();
if (h < 2) return;
int w = board[0].size();
if (w < 2) return;

for (int i = 0; i < h; i++) {
if (board[i][0] == 'O')
bfs(board, i, 0);
if (board[i][w - 1] == 'O')
bfs(board, i, w - 1);
}

for (int j = 0; j < w; j++) {
if (board[0][j] == 'O')
bfs(board, 0, j);
if (board[h - 1][j] == 'O')
bfs(board, h - 1, j);
}

for (int i = 0; i < h; i++) {
for (int j = 0; j < w; j++) {
if (board[i][j] == 'O')
board[i][j] = 'X';
else if (board[i][j] == '.')
board[i][j] = 'O';
}
}
}


void dfs(vector<vector<char>>& board, int row, int col) {
if (board[row][col] == 'O') {
board[row][col] = '.';
if (row > 1)
dfs(board, row - 1, col);
if (col > 1)
dfs(board, row, col - 1);
if (row + 1 < board.size())
dfs(board, row + 1, col);
if (col + 1 < board[0].size())
dfs(board, row, col + 1);
}
}

void solve(vector<vector<char>>& board) {
int h = board.size();
if (h < 2) return;
int w = board[0].size();
if (w < 2) return;

for (int i = 0; i < h; i++) {
dfs(board, i, 0);
dfs(board, i, w - 1);
}

for (int j = 0; j < w; j++) {
dfs(board, 0, j);
dfs(board, h - 1, j);
}

for (int i = 0; i < h; i++) {
for (int j = 0; j < w; j++) {
if (board[i][j] == 'O')
board[i][j] = 'X';
else if (board[i][j] == '.')
board[i][j] = 'O';
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  leetcode bfs dfs