[leetcode刷题系列]Surrounded Regions

2023-12-15 01:48

本文主要是介绍[leetcode刷题系列]Surrounded Regions,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

囧, 这题用dfs我re了,应该是爆栈了。 于是改成了bfs就过了


const int MAXN = 1000 + 10;const int dx[] = {-1, 0, 0, 1};
const int dy[] = {0, -1, 1, 0};int n, m;
bool vis[MAXN][MAXN];void bfs(int r, int c, vector<vector<char> > & board){queue<pair<int, int> > q;q.push(make_pair(r, c));vis[r][c] = 1;while(!q.empty()){r = q.front().first;c = q.front().second;q.pop();for(int p = 0; p < 4; ++ p){int nr = r + dx[p];int nc = c + dy[p];if(nr >= 0 && nr < n)if(nc >= 0 && nc < m)if(!vis[nr][nc])if(board[nr][nc] == 'O'){vis[nr][nc] = 1;q.push(make_pair(nr, nc));}}}
}
class Solution {
public:void solve(vector<vector<char>> &board) {// Start typing your C/C++ solution below// DO NOT write int main() functionif(board.size() <= 0 || board[0].size() <= 0)return;memset(vis, 0x00, sizeof(vis));n = board.size();m = board[0].size();for(int i = 0; i < m; ++ i)if(board[0][i] == 'O')if(!vis[0][i])bfs(0, i, board);for(int i = 0; i< m; ++ i)if(board[n - 1][i] == 'O')if(!vis[n - 1][i])bfs(n - 1, i, board);for(int i = 0; i < n; ++ i)if(board[i][0] == 'O')if(!vis[i][0])bfs(i, 0, board);for(int i = 0; i < n; ++ i)if(board[i][m - 1] == 'O')if(!vis[i][m - 1])bfs(i, m - 1, board);for(int i = 0; i < n; ++ i)for(int j = 0; j < m; ++ j)if(board[i][j] == 'O')if(!vis[i][j])board[i][j] = 'X';}
};


这篇关于[leetcode刷题系列]Surrounded Regions的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/494655

相关文章

Spring Security 从入门到进阶系列教程

Spring Security 入门系列 《保护 Web 应用的安全》 《Spring-Security-入门(一):登录与退出》 《Spring-Security-入门(二):基于数据库验证》 《Spring-Security-入门(三):密码加密》 《Spring-Security-入门(四):自定义-Filter》 《Spring-Security-入门(五):在 Sprin

哈希leetcode-1

目录 1前言 2.例题  2.1两数之和 2.2判断是否互为字符重排 2.3存在重复元素1 2.4存在重复元素2 2.5字母异位词分组 1前言 哈希表主要是适合于快速查找某个元素(O(1)) 当我们要频繁的查找某个元素,第一哈希表O(1),第二,二分O(log n) 一般可以分为语言自带的容器哈希和用数组模拟的简易哈希。 最简单的比如数组模拟字符存储,只要开26个c

科研绘图系列:R语言扩展物种堆积图(Extended Stacked Barplot)

介绍 R语言的扩展物种堆积图是一种数据可视化工具,它不仅展示了物种的堆积结果,还整合了不同样本分组之间的差异性分析结果。这种图形表示方法能够直观地比较不同物种在各个分组中的显著性差异,为研究者提供了一种有效的数据解读方式。 加载R包 knitr::opts_chunk$set(warning = F, message = F)library(tidyverse)library(phyl

【生成模型系列(初级)】嵌入(Embedding)方程——自然语言处理的数学灵魂【通俗理解】

【通俗理解】嵌入(Embedding)方程——自然语言处理的数学灵魂 关键词提炼 #嵌入方程 #自然语言处理 #词向量 #机器学习 #神经网络 #向量空间模型 #Siri #Google翻译 #AlexNet 第一节:嵌入方程的类比与核心概念【尽可能通俗】 嵌入方程可以被看作是自然语言处理中的“翻译机”,它将文本中的单词或短语转换成计算机能够理解的数学形式,即向量。 正如翻译机将一种语言

leetcode-24Swap Nodes in Pairs

带头结点。 /*** Definition for singly-linked list.* public class ListNode {* int val;* ListNode next;* ListNode(int x) { val = x; }* }*/public class Solution {public ListNode swapPairs(L

leetcode-23Merge k Sorted Lists

带头结点。 /*** Definition for singly-linked list.* public class ListNode {* int val;* ListNode next;* ListNode(int x) { val = x; }* }*/public class Solution {public ListNode mergeKLists

flume系列之:查看flume系统日志、查看统计flume日志类型、查看flume日志

遍历指定目录下多个文件查找指定内容 服务器系统日志会记录flume相关日志 cat /var/log/messages |grep -i oom 查找系统日志中关于flume的指定日志 import osdef search_string_in_files(directory, search_string):count = 0

C++ | Leetcode C++题解之第393题UTF-8编码验证

题目: 题解: class Solution {public:static const int MASK1 = 1 << 7;static const int MASK2 = (1 << 7) + (1 << 6);bool isValid(int num) {return (num & MASK2) == MASK1;}int getBytes(int num) {if ((num &

【每日一题】LeetCode 2181.合并零之间的节点(链表、模拟)

【每日一题】LeetCode 2181.合并零之间的节点(链表、模拟) 题目描述 给定一个链表,链表中的每个节点代表一个整数。链表中的整数由 0 分隔开,表示不同的区间。链表的开始和结束节点的值都为 0。任务是将每两个相邻的 0 之间的所有节点合并成一个节点,新节点的值为原区间内所有节点值的和。合并后,需要移除所有的 0,并返回修改后的链表头节点。 思路分析 初始化:创建一个虚拟头节点

C语言 | Leetcode C语言题解之第393题UTF-8编码验证

题目: 题解: static const int MASK1 = 1 << 7;static const int MASK2 = (1 << 7) + (1 << 6);bool isValid(int num) {return (num & MASK2) == MASK1;}int getBytes(int num) {if ((num & MASK1) == 0) {return