Leetcode -- Surrounded Regions
2015-10-26 18:35
375 查看
Given a 2D board containing
capture all regions surrounded by
A region is captured by flipping all
in that surrounded region.
For example,
After running your function, the board should be:
本题使用最基本的宽度优先搜索,以队列进行节点的扩展。
'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'; } } };
相关文章推荐
- jquery选择器取值和url正则匹配
- 2.1.5 用SSS扫描器实施扫描
- BZOJ 4305 数列的GCD 数论
- 严蔚敏 数据结构 4.30 最长公共字串
- 逆波兰表达式C++代码实现
- 调试关于Hibernate的程序遇到的问题
- DF saveEngine
- 2.1.4 扫描器X-Scan查本机隐患
- 海量数据挖掘MMDS week5: 聚类clustering
- 海量数据挖掘MMDS week5: 聚类clustering
- Vim pre-work
- unity3d之UIPlayTween。
- Python访问限制
- 主流脚本编程语言大比拼 优缺点一目了然
- 需求工程
- 上传列表集合wsp包
- 详解CSS盒模型
- 从0开始<十>:atof 函数的简单实现
- php call_user_func()函数
- Linux网络查看命令