【leetcode题解】5 - Surrounded Regions
2014-03-12 00:40
387 查看
Surrounded Regions
Given a 2D board containing
capture all regions surrounded by
A region is captured by flipping all
into
in that surrounded region.
For example,
After running your function, the board should be:
leetcode题目链接
解题思路:
边缘的'O'一定不会被'X'包围,和边缘的'O'连通的'O'也不会被包围
用DFS BFS 搜索边缘'O'的联通'O'(上下左右四个方向),解决问题
源码:
以上用DFS做的,大数据通不过。
试了网上其他人的代码,也都通不过。
法2:BFS
ing……
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
leetcode题目链接
解题思路:
边缘的'O'一定不会被'X'包围,和边缘的'O'连通的'O'也不会被包围
用DFS BFS 搜索边缘'O'的联通'O'(上下左右四个方向),解决问题
源码:
class Solution { public: // 从该点开始在上下左右四个方向上做深度优先搜索 // 直到不是'O' 找到连通的'O' void DFS(vector<vector<char> > &board, int row, int col) { if ((row < 0) || (col < 0) || (row >= board.size()) || (col >= board[0].size()) || (board[row][col] != 'O') ) return; board[row][col] = '#'; // 连通的'O'标记为'#' DFS(board, row - 1, col); // up DFS(board, row + 1, col); // down DFS(board, row, col - 1); // right DFS(board, row, col + 1); // left return; } void solve(vector<vector<char> > &board) { // Note: The Solution object is instantiated only once and is reused by each test case. // 边缘的'O'一定不会被'X'包围 // 和边缘的'O'连通的'O'也不会被包围 // 用DFS BFS进行搜索,解决问题 if (board.empty()) return; int n = board.size(); int m = board[0].size(); for (int i = 0; i < n; ++i) // row { DFS(board, i, 0); // 第i行从第0列开始DFS DFS(board, i, m-1); // 第i行从第m-1列开始DFS } // for (int j = 0; j < m; ++j) // col for (int j = 1; j < m-1; ++j) // 第一列和最后一列已经在上面遍历了 { DFS(board, 0, j); // 第0列 DFS(board, n-1, j); // 第n-1列 } 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'; } } return; } };
以上用DFS做的,大数据通不过。
试了网上其他人的代码,也都通不过。
法2:BFS
ing……
相关文章推荐
- 从源码安装Mysql/Percona 5.5
- asp.net 抓取网页源码三种实现方法
- java中原码、反码与补码的问题分析
- Win2003利用dfs(分布式文件系统)在负载均衡下的文件同步配置方案
- 基于Android设计模式之--SDK源码之策略模式的详解
- seajs1.3.0源码解析之module依赖有序加载
- win2003分布式文件系统(dfs)配置方法[图文详解]
- win2003分布式文件系统及其部署 图文教程
- 1. ThinkPHP3.1.2源码分析(ThinkPHP.php)
- Android2.3系统源码及编译后内容下载分享
- 【原创】OpenStack Swift源码分析(三)proxy服务启动
- PHP安全编程:共享主机的源码安全
- [源码]mplayerc播放器源代码
- 通过命令查找源码的方法
- Android service里面启动activity和alertdialog .
- Linux中rpm、src.rpm、源码包软件的安装
- DFS使用方法总结
- sock5代理源码
- 源码分析必备:用vld查看opcode信息
- LAMP源码安装