代码随想录(番外)图论3|1020. 飞地的数量|130. 被围绕的区域

news/2024/9/23 18:27:45/

代码随想录(番外)图论3|1020. 飞地的数量|130. 被围绕的区域

1020. 飞地的数量

class Solution {
public:int dir[4][2]={0,1,1,0,0,-1,-1,0};int count;void dfs(vector<vector<int>>& grid,int x,int y){grid[x][y]=0;count++;for(int i=0;i<4;i++){int nextx=x+dir[i][0];int nexty=y+dir[i][1];if(nextx<0||nexty<0||nextx>=grid.size()||nexty>=grid[0].size()) continue;if(grid[nextx][nexty]==0) continue;dfs(grid,nextx,nexty);}return;}int numEnclaves(vector<vector<int>>& grid) {int m=grid.size(),n=grid[0].size();for(int i=0;i<n;i++){if(grid[0][i]==1) dfs(grid,0,i);if(grid[m-1][i]==1) dfs(grid,m-1,i);}for(int j=0;j<m;j++){if(grid[j][0]==1) dfs(grid,j,0);if(grid[j][n-1]==1) dfs(grid,j,n-1);}count=0;for(int i=0;i<m;i++)for(int j=0;j<n;j++){if(grid[i][j]==1) dfs(grid,i,j);}return count;}
};
/*
本题是通过把四周的边界区域归0,然后最后遍历全部
之后可以得出图中飞地,但是要特别注意区域边界值问题,最后画图
确定边界范围,这样不容易出错。
*/

在这里插入图片描述

1021. 130. 被围绕的区域

class Solution {
public:int dir[4][2]={0,1,1,0,0,-1,-1,0};void dfs(vector<vector<char>>& board,int x,int y){board[x][y]='A';for(int i=0;i<4;i++){int nextx=x+dir[i][0];int nexty=y+dir[i][1];if(nextx<0||nexty<0||nextx>=board.size()||nexty>=board[0].size()) continue;if(board[nextx][nexty]=='A'||board[nextx][nexty]=='X') continue;dfs(board,nextx,nexty);}}void solve(vector<vector<char>>& board) {int m=board.size(),n=board[0].size();for(int i=0;i<m;i++){if(board[i][0]=='O') dfs(board,i,0);if(board[i][n-1]=='O') dfs(board,i,n-1);}for(int j=0;j<n;j++){if(board[0][j]=='O') dfs(board,0,j);if(board[m-1][j]=='O') dfs(board,m-1,j);            }for(int i=0;i<m;i++)for(int j=0;j<n;j++){if(board[i][j]=='O') board[i][j]='X';if(board[i][j]=='A') board[i][j]='O';}}
};/*
其中算法还是比较巧妙的不用再定义一个二维数组来标记
一直出小错误,
1.边界,一定一定一定要在纸上画。
2.注意边界dfs遍历
恼火。
*/

在这里插入图片描述


http://www.ppmy.cn/news/1437385.html

相关文章

非Controller控制层参数校验怎么办

文章目录 看源码Validator 实操依赖Spring 容器不依赖Spring 容器 总结 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站。 上篇文章中我们介绍了如何自定义Springboot参数约束注解和约束校…

分布式ID之雪花算法

1. Seata对雪花算法生成ID的改良 滑动验证页面 &#xff08;含代码&讲解&#xff09; Seata基于改良版雪花算法的分布式UUID生成器分析&#xff1a;时间戳和节点ID位置进行了调换。官网&#xff1a;Seata基于改良版雪花算法的分布式UUID生成器分析 | Apache Seata关于新版…

所有单片机使用的汇编语言是统一的吗?

在开始前我有一些资料&#xff0c;是我根据网友给的问题精心整理了一份「单片机的资料从专业入门到高级教程」&#xff0c; 点个关注在评论区回复“888”之后私信回复“888”&#xff0c;全部无偿共享给大家&#xff01;&#xff01;&#xff01;这个问题应该从编译器&#xf…

Postman - 设置变量

场景&#xff1a; 比如你接口都有权限&#xff0c;访问需要每调一个接口都手动放token的值&#xff0c;这个时候就可以搞个全局的变量&#xff0c;只设置一次就可以了 1、设置变量 Environments -> Globals - > 设置key 、value 2、使用变量 {{你得变量名-key}} 3…

前端开发攻略---用原生JS在网页中也能实现语音识别

1、语音识别的过程 语音识别涉及三个过程&#xff1a;首先&#xff0c;需要设备的麦克风接收这段语音&#xff1b;其次&#xff0c;语音识别服务器会根据一系列语法 (基本上&#xff0c;语法是你希望在具体的应用中能够识别出来的词汇) 来检查这段语音&#xff1b;最后&#xf…

Spark-core面试知识点

Spark课程(web&#xff1a;默认值是8080&#xff0c;但是这个端口号容易被占用&#xff0c;顺势1&#xff1b;提交任务端口号&#xff1a;7077) 一、RDD RDD是spark最底层的核心抽象&#xff0c;叫做弹性分布式数据集。 特点&#xff1a;不可变&#xff0c;可分区&#xff0…

vi, vim,data,wc,系统常用命令-读书笔记(十)

vi 文本编辑器 基本上 vi 共分为三种模式&#xff0c;分别是“一般指令模式”、“编辑模式”与“命令行命令模式”。这三种模式的作用分别是&#xff1a; 一般指令模式&#xff08;command mode&#xff09;以 vi 打开一个文件就直接进入一般指令模式了&#xff08;这是默认的…

Unity构建详解(10)——Unity构建流程

【前言】 我们知道从源代码到可执行文件有四个步骤&#xff1a;预编译、编译、汇编、链接 预编译&#xff1a;处理源代码文件中的以“#”开始的各种预编译指令编译&#xff1a;通过语法语义分析等将源代码文件转为中间语言文件并进行优化&#xff0c;再生成汇编代码文件汇编&…