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
 
 
用dfs试试,大数据时递归会溢出
 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;
}
}
};
利用广度优先搜索,先把边界上的O全部放到队列中,然后搜索
 
 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的更多相关文章

  1. 【leetcode】Surrounded Regions(middle)☆

    Given a 2D board containing 'X' and 'O', capture all regions surrounded by 'X'. A region is captured ...

  2. 【LeetCode】959. Regions Cut By Slashes 由斜杠划分区域(Python)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题思路 代码 日期 题目地址:https://leetcod ...

  3. 【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 ...

  4. 【LeetCode】BFS(共43题)

    [101]Symmetric Tree 判断一棵树是不是对称. 题解:直接递归判断了,感觉和bfs没有什么强联系,当然如果你一定要用queue改写的话,勉强也能算bfs. // 这个题目的重点是 比较 ...

  5. 【LeetCode】并查集 union-find(共16题)

    链接:https://leetcode.com/tag/union-find/ [128]Longest Consecutive Sequence  (2018年11月22日,开始解决hard题) 给 ...

  6. 【LeetCode】深搜DFS(共85题)

    [98]Validate Binary Search Tree [99]Recover Binary Search Tree [100]Same Tree [101]Symmetric Tree [1 ...

  7. 【LeetCode】Island Perimeter 解题报告

    [LeetCode]Island Perimeter 解题报告 [LeetCode] https://leetcode.com/problems/island-perimeter/ Total Acc ...

  8. 【LeetCode】Minimum Depth of Binary Tree 二叉树的最小深度 java

    [LeetCode]Minimum Depth of Binary Tree Given a binary tree, find its minimum depth. The minimum dept ...

  9. 【Leetcode】Pascal&#39;s Triangle II

    Given an index k, return the kth row of the Pascal's triangle. For example, given k = 3, Return [1,3 ...

随机推荐

  1. CKEditor的使用方法

    CKEditor的使用方法 2014-03-31 09:44 8649人阅读 评论(1) 收藏 举报 版权声明:本文为博主原创文章,未经博主允许不得转载. ckeditor 的官方网站是 http:/ ...

  2. MySQL分表自增ID解决方案(转)

    当我们对MySQL进行分表操作后,将不能依赖MySQL的自动增量来产生唯一ID了,因为数据已经分散到多个表中. 应尽量避免使用自增IP来做为主键,为数据库分表操作带来极大的不便. 在postgreSQ ...

  3. oracle中一些用法总结

    1. case用法: --简单case函数 case sex when '1' then 'boy' when '2' then 'girl' else '其他' end; --case搜索函数 ca ...

  4. jQuery.validator 详解二

    前言:上一篇详细的介绍了jQuery.validator( 版本v1.13.0 )的验证规则,这一篇重点讲述它的源码结构,及如何来对元素进行验证,错误消息提示的内部实现 一.插件结构(组织方式) 在讲 ...

  5. VTK初学一,a Mesh from vtkImageData

    #ifndef INITIAL_OPENGL #define INITIAL_OPENGL #include <vtkAutoInit.h> VTK_MODULE_INIT(vtkRend ...

  6. Windows下如何修改php.ini的访问路径?

    Windows下,用 IIS跑PHP,有个缺点,那就是一定要把 php.ini 放在 Windows 的系统路径下 (C:/Windows) .不过,可以通过以下方式修改访问路径: 第一步: 把PHP ...

  7. JVM内存模型和关键参数设置

    一. JVM内存模型: Jvm内存模型是学好Java很重要的一部分,该部分学习能让我们在系统运维的时候,或者优化服务器的时候能够有方法,懂原理. 二. Jvm关键参数: 1. 堆大小设置参数: -Xm ...

  8. Divide Two Integers

    视频讲解  http://v.youku.com/v_show/id_XMTY1MTAyODM3Ng==.html int 范围: Integer.MIN_VALUE => -214748364 ...

  9. 解决ubuntu每次重启屏幕亮度都重置为最高亮度问题

    很多朋友都会碰到这个问题,Ubuntu系统,每次通过系统设置修改了屏幕亮度,重启系统都会将屏幕亮度调成最大值,很是苦恼. 上网搜索一番发现,修改屏幕亮度的文件是:/sys/class/backligh ...

  10. Unity3D Pro破解

    Win破解方法: 全新安装Unity且未打开Unity后!!! 下载程序, 右键管理员运行, 点击Browse选择Unity安装目录内的Editor文件夹, 确定. 然后点击大按钮PATCH即可, 如 ...