力扣刷题记录(28)LeetCode:797、200、463

797. 所有可能的路径

解题思路:回溯算法,当收集到的路径的最后一个值等于n-1时,收集答案。

参数:图、当前结点

 

class Solution {
public:vector<int> path;vector<vector<int>> ans;void dfs(vector<vector<int>>& graph,int index){if(path.back()==graph.size()-1){ans.push_back(path);return;}for(int i=0;i<graph[index].size();i++){path.push_back(graph[index][i]);dfs(graph,graph[index][i]);//回溯path.pop_back();}}vector<vector<int>> allPathsSourceTarget(vector<vector<int>>& graph) {//从0开始的,先将0传入路径中path.push_back(0);dfs(graph,0);return ans;}
};

200. 岛屿数量

解题思路:如果我们遍历到一块陆地,那我们就以这块陆地为中心向它的周围扩散,将所有与之相连的陆地全部都标记。这时我们所标记的所有相连的陆地就形成了一片岛屿,岛屿数量加一。那我们如果对所有陆地都进行这样的操作,就可以得到岛屿的数量。需要注意的是我们需要对已经标记过的陆地进行这样的操作,因为它已经是前面统计过的岛屿的一部分。

class Solution {
private:void dfs(vector<vector<char>>& grid,int x,int y){//判断是否越界if(x>=grid[0].size() || y>=grid.size()) return;//判断岛屿是否遍历过 只遍历岛屿if(grid[y][x]=='2'||grid[y][x]=='0')  return;//将岛屿的状态改为遍历过grid[y][x]='2';dfs(grid,x-1,y);dfs(grid,x+1,y);dfs(grid,x,y-1);dfs(grid,x,y+1);}
public:int numIslands(vector<vector<char>>& grid) {int ans=0;for(int i=0;i<grid.size();i++){for(int j=0;j<grid[0].size();j++){if(grid[i][j]=='1'){//将和该陆地连在一起的陆地的状态都改变为遍历过dfs(grid,j,i);ans++;}}}return ans;}
};

463. 岛屿的周长 

解题思路:深度优先遍历,可以向上下左右是个方向进行深度遍历。如果在某一方向上遍历到水或者超出了边界,那么这个方向上的周长就确定是1了。如果遍历到陆地则继续深入下去。需要注意的是对于遍历过的元素一定要做标记,否则将陷入死循环中。

class Solution {
public:int dfs(vector<vector<int>>& grid,int i,int j){if( (i>=grid.size() || i<0) || (j>=grid[0].size()||j<0) )   return 1;if(grid[i][j]==0) return 1;//遍历过的将不再遍历 且持有的周长为0if(grid[i][j]==2)   return 0;//对遍历过的陆地进行标记grid[i][j]=2;return dfs(grid,i-1,j)+dfs(grid,i+1,j)+dfs(grid,i,j-1)+dfs(grid,i,j+1);}int islandPerimeter(vector<vector<int>>& grid) {for(int i=0;i<grid.size();i++){for(int j=0;j<grid[0].size();j++){if(grid[i][j]==1) return dfs(grid,i,j);}}return 0;}
};

 总结

图论题目主要是运用两种方法,深度优先遍历、广度优先遍历,本文章的三道题所用的均是深度优先遍历。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/343388.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Spring MVC 异常处理器

异常处理器 如果不加以异常处理&#xff0c;错误信息肯定会抛在浏览器页面上&#xff0c;这样很不友好&#xff0c;所以必须进行异常处理。 异常处理思路 系统的dao、service、controller出现都通过throws Exception向上抛出&#xff0c;最后由springmvc前端控制器交由异常处…

使用Linux安装Mysql Community Server 8.0.35

一、下载Mysql 官网&#xff1a;https://www.mysql.com/ 第一步&#xff1a;进入Linux官网&#xff0c;点击下载 第二步&#xff1a;点击MySQL Community (GPL) Downloads 第三步&#xff1a;进入页面&#xff0c;选择 MySQL Community Server 第四步&#xff1a;根据自己服务…

python使用pyinstaller一键打包函数源码,自用源码

文章目录 📖 介绍 📖🏡 环境 🏡📒 源码 📒⚓️ 相关链接 ⚓️📖 介绍 📖 本文记录一个python使用pyinstaller一键打包的自用函数源码,仅供个人使用!因为源码部分参数是个人项目中设定的,您可能不适用 🏡 环境 🏡 本文演示环境如下,由于测试条件有限,不…

Skywalking UI页面中操作的各种实用功能汇总

刚刚接触skywalking不久&#xff0c;在这里总结一下在UI页面中操作的各种实用功能&#xff0c;随着使用的不断深入&#xff0c;我也会对文章进行持续补充。 本文skywalking 的ui入口是官方demo &#xff0c;版本是10.0.0-SNAPSHOT-593bd05 http://demo.skywalking.apache.org…

SSM整合(实现简单查询功能)

在名为ssm的数据库内创建表 CREATE TABLE account (id int(11) NOT NULL AUTO_INCREMENT,name varchar(20) DEFAULT NULL,money double DEFAULT NULL,PRIMARY KEY (id) ) ENGINEInnoDB DEFAULT CHARSETutf8; 创建工程 pom.xml <?xml version"1.0" encoding&quo…

持久双向通信网络协议-WebSocket-入门案例实现demo

1 介绍 WebSocket 是基于 TCP 的一种新的网络协议。它实现了浏览器与服务器全双工通信——浏览器和服务器只需要完成一次握手&#xff0c;两者之间就可以创建持久性的连接&#xff0c; 并进行双向数据传输。 HTTP协议和WebSocket协议对比&#xff1a; HTTP是短连接&#xff0…

Visual Studio 2019 ctrl+f 呼出查找和替换窗口

有时候 ctrlshiftf 呼出查找和替换窗口不起作用&#xff0c;可能和其它程序的快捷键冲突&#xff0c;解决方案&#xff1a; ------------英文版本------------ 依次点击VS菜单栏中的 Tools - Options - Environment - Keyboard: 1. 在右侧的 Show commands containing: 文本框输…

使用BeanShell写入内容到文件【JMeter】

一、前言 ​ 在我们日常工作中&#xff0c;可能会遇到需要将请求返回的数据写入到文件中。在我们使用JMeter进行性能测试时&#xff0c;就经常能够遇到这种情况。要想达到这种目的&#xff0c;我们一般采取BeanShell后置处理器来将内容写入到文件。 二、提取 ​ 在目前大多数的…

Linux系统——DNS解析详解

目录 一、DNS域名解析 1.DNS的作用 2.域名的组成 2.1域名层级结构关系特点 2.2域名空间构成 2.3域名的四种不同类型 2.3.1延伸 2.3.2总结 3.DNS域名解析过程 3.1递归查询 3.2迭代查询 3.3一次DNS解析的过程 4.DNS系统类型 4.1缓存域名服务器 4.2主域名服务器 4…

Python-动态烟花【附完整源码】

烟花代码 运行效果&#xff1a;Python动态烟花代码 import pygame from random import randint from random import uniform from random import choice import math vector pygame.math.Vector2 # 重力变量 gravity vector(0, 0.3) # 控制窗口的大小 DISPLAY_WIDTH DISP…

《BackTrader量化交易图解》第10章:Trade 交易操作

文章目录 10 Trade 交易操作10.1 量化回测分析流程10.2 Cerebro 类模块10.3 案例&#xff1a;Trade 交易10.4 实盘交易机器隐性规则10.5 Stake 交易数额和 Trade 交易执行价格 10 Trade 交易操作 10.1 量化回测分析流程 从本章开始讲解 BackTrader 的实盘操作。前面的章节讲过…

SwiftUI 为任意视图加上徽章(Badge)而想到的(下)

概览 在 SwiftUI 为任意视图加上徽章(Badge)而想到的(上) 这篇文章中,我们讨论了如何使用 Preference 技术打造 SwiftUI 中任意视图上徽章的实现。 虽然,我们完成了一系列挑战最后基本得偿所愿,不过在上篇的实现中仍有些许不尽如人意之处。 在本篇博文中,您将学到如下…