代码随想录(番外)图论2

ops/2025/3/19 14:26:15/

代码随想录(番外)图论2

4. 岛屿数量.深搜版
5. 岛屿数量.广搜版
6. 岛屿的最大面积

https://programmercarl.com/0200.%E5%B2%9B%E5%B1%BF%E6%95%B0%E9%87%8F.%E6%B7%B1%E6%90%9C%E7%89%88.html

4. 岛屿数量.深搜版

class Solution {
public:int dir[4][2]={0,1,1,0,-1,0,0,-1};//4个方向,每行代表一个方向,上右下左void dfs(vector<vector<char>>& grid,vector<vector<bool>>& visited,int x,int y)//如果搞不清可以画一个坐标轴{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(!visited[nextx][nexty]&&grid[nextx][nexty]=='1')// 没有访问过的 同时 是陆地的{visited[nextx][nexty]=true;dfs(grid,visited,nextx,nexty);//通过dfs把所有链接的土地找到}}}int numIslands(vector<vector<char>>& grid) {int n=grid[0].size();int m=grid.size();int result=0;vector<vector<bool>> visited=vector<vector<bool>>(m,vector<bool>(n,false));for(int i=0;i<m;i++)for(int j=0;j<n;j++){if(!visited[i][j]&&grid[i][j]=='1'){   result++; // 遇到没访问过的陆地,+1dfs(grid,visited,i,j); // 将与其链接的陆地都标记上 true}}return result;}
};

5. 岛屿数量.广搜版

class Solution {
private:
int dir[4][2] = {0, 1, 1, 0, -1, 0, 0, -1}; // 四个方向
void bfs(vector<vector<char>>& grid, vector<vector<bool>>& visited, int x, int y) {queue<pair<int, int>> que;que.push({x, y});visited[x][y] = true; // 只要加入队列,立刻标记while(!que.empty()) {pair<int ,int> cur = que.front(); que.pop();int curx = cur.first;int cury = cur.second;for (int i = 0; i < 4; i++) {int nextx = curx + dir[i][0];int nexty = cury + dir[i][1];if (nextx < 0 || nextx >= grid.size() || nexty < 0 || nexty >= grid[0].size()) continue;  // 越界了,直接跳过if (!visited[nextx][nexty] && grid[nextx][nexty] == '1') {que.push({nextx, nexty});visited[nextx][nexty] = true; // 只要加入队列立刻标记}}}
}
public:int numIslands(vector<vector<char>>& grid) {int n = grid.size(), m = grid[0].size();vector<vector<bool>> visited = vector<vector<bool>>(n, vector<bool>(m, false));int result = 0;for (int i = 0; i < n; i++) {for (int j = 0; j < m; j++) {if (!visited[i][j] && grid[i][j] == '1') {result++; // 遇到没访问过的陆地,+1bfs(grid, visited, i, j); // 将与其链接的陆地都标记上 true}}}return result;}
};

6. 岛屿的最大面积

class Solution {
public:int count;int dir[4][2]={0,1,1,0,0,-1,-1,0};void dfs(vector<vector<int>>& grid,vector<vector<bool>>& visited,int x,int y){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(!visited[nextx][nexty]&&grid[nextx][nexty]==1){visited[nextx][nexty]=true;count++;dfs(grid,visited,nextx,nexty);}}}int maxAreaOfIsland(vector<vector<int>>& grid) {int m=grid.size(),n=grid[0].size();int result=0;vector<vector<bool>>visited=vector<vector<bool>>(m,vector<bool>(n,false));for(int i=0;i<m;i++)for(int j=0;j<n;j++){if(!visited[i][j]&&grid[i][j]==1){count=1;visited[i][j]=true;dfs(grid,visited,i,j);result=max(result,count);}}return result;}
};

总结
其实就是dfs之后在遍历一个正常岛屿后比大小,里面的小错误差点把我整红温了,就是对nextx,nexty 的grid[0].size(),的[0]忘写了最后dbug成功,还有就是在类型里面多delete>,找了半天没找到,躺着打效率确实有点低。


http://www.ppmy.cn/ops/12244.html

相关文章

【数据结构】三、栈和队列:4.栈的应用(括号匹配,四则运算表达式求值,进制转换,递归)

文章目录 栈的应用1.括号匹配1.1三种错误情况1.2流程图❗1.3算法c实例 ❗2.表达式求值2.1表达式求值2.2中缀转后缀&#xff08;手算&#xff09;2.3后缀表达式计算2.4中缀转前缀2.5中缀转后缀&#xff08;机算&#xff09;2.5表达式树与逆波兰表达式 3.进制转换4.递归缺点 栈的…

C语言Linux vim shell命令

无论是在插入模式或者是其他模式下对于文件的修改都是对于内存缓冲区进行修改&#xff0c;只有当点击w进行保存以后才会将数据写入到一个新的文件中的&#xff0c;将源文件删除&#xff0c;并且新文件改为文件的名字 1. actionmotion dG删到文件尾 ggdG先到开头再删除到末尾…

【Linux】文件目录及路径表示

1. Linux目录结构 在 Linux 系统中&#xff0c;有几个目录是比较重要的&#xff0c;平时需要注意不要误删除或者随意更改内部文件。 /etc&#xff1a; 这个是系统中的配置文件&#xff0c;如果更改了该目录下的某个文件可能会导致系统不能启动。 /bin, /sbin, /usr/bin, /usr…

Android --- 英文单引号用apos;替换报错:does not contain a valid string resource

<string name"SSSS_09_08_06_RES_12">Remove owner&apos;s digital key</string>报错信息如下&#xff1a; string/SSSS_MM_09_08_06_RES_12 does not contain a valid string resource在开发的过程中需要使用英文的单引号&#xff0c;度娘说用“#a…

Linux RTC驱动深入解析

目录标题 实时时钟&#xff08;RTC&#xff09;基础Linux内核中的RTC框架RTC设备类设备树&#xff08;Device Tree&#xff09; 编写Linux RTC驱动1. 初始化和注册2. RTC设备操作函数3. 清理函数 测试RTC驱动驱动开发的挑战总结 在许多嵌入式系统和服务器上&#xff0c;实时时钟…

关键绩效指标(KPI):明确目标及跟踪进展

在企业管理中&#xff0c;关键绩效指标&#xff08;KPI&#xff09;是一种重要的工具&#xff0c;用于明确目标并跟踪进展。通过设定和监控这些指标&#xff0c;企业能够确保员工、团队和整个组织都朝着既定的目标努力。本文将详细探讨关键绩效指标的重要性、设定方法以及如何有…

python制作小游戏2

“石头、剪刀、布”游戏。以下是Python实现的代码&#xff1a; import random def get_computer_choice(): """获取计算机的选择""" choices [石头, 剪刀, 布] return random.choice(choices) def get_user_choice(): """…

【C语言__指针02__复习篇12】

目录 前言 一、数组名的理解 二、使用指针访问数组 三、一维数组传参的本质 四、冒泡排序 五、二级指针 六、指针数组 七、指针数组模拟二维数组 前言 本篇主要讨论以下问题&#xff1a; 1. 数组名通常表示什么&#xff0c;有哪两种例外情况&#xff0c;在例外情况中…