[LeetCode] 130. Surrounded Regions
2016-09-04 15:10
381 查看
思路1:
BFS. 从四条边找’O’, 找到’O’以后把他们和他们连接的’O’都改成别的字母, 然后都改完以后把剩下的’O’都换成’X’, 再把刚才别的字母换回’O’即可.
思路2:
DFS. 思路做法大同小异, 就是为了不超时, 要减少dfs次数, 就避免从内部又去矩阵边缘找.
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'; } } }
相关文章推荐
- Win2003利用dfs(分布式文件系统)在负载均衡下的文件同步配置方案
- win2003分布式文件系统(dfs)配置方法[图文详解]
- win2003分布式文件系统及其部署 图文教程
- js算法: 图的两种表示方法以及广度优先算法
- leetcode 179 Largest Number
- leetcode 24 Swap Nodes in Pairs
- leetcode 2 Add Two Numbers 方法1
- leetcode 2 Add Two Numbers 方法2
- Hadoop2.6+jdk8的安装部署(1)——使用jar包安装部署【详细】
- Hadoop FS Shell
- DFS使用方法总结
- leetcode----Longest Substring Without Repeating Characters
- FastDFS注意事项
- 无忧技术带您预览DFS(分布式文件系统)管理控制台
- [LeetCode]47 Permutations II
- [LeetCode]65 Valid Number
- [LeetCode]123 Best Time to Buy and Sell Stock III
- [LeetCode] String Reorder Distance Apart
- [LeetCode] Sliding Window Maximum
- [LeetCode] Find the k-th Smallest Element in the Union of Two Sorted Arrays