代码随想录算法训练营第 50 天 |98. 所有可达路径

news2024/11/16 9:39:24

代码随想录算法训练营

Day50 代码随想录算法训练营第 50 天 |98. 所有可达路径


目录

  • 代码随想录算法训练营
  • 前言
    • LeetCode98. 所有可达路径
  • 一、图论基础概念
    • 1、图的种类
    • 2、度
    • 3、连通性:节点的连通情况
    • 4、图的构造
    • 5、图的遍历方式
  • 二、深度优先搜索
    • 1、深度优先搜索的三部曲
    • 2、深度优先搜索框架
  • 三、LeetCode98. 所有可达路径
    • 1.题目链接
    • 2.思路
    • 3.题解
  • 总结


前言

LeetCode98. 所有可达路径

讲解文档


一、图论基础概念

1、图的种类

整体上一般分为 有向图 和 无向图

2、度

(1)无向图中有几条边连接该节点,该节点就有几度
(2)在有向图中,每个节点有出度和入度。

出度:从该节点出发的边的个数。

入度:指向该节点边的个数。

例如,该有向图中,节点3的入度为2,出度为1,节点1的入度为0,出度为2

3、连通性:节点的连通情况

(1)连通图
在无向图中,任何两个节点都是可以到达的的图为连通图
(如果有节点不能到达其他节点,则为非连通图)
(2)强连通图
在有向图中,任何两个节点是可以相互到达的为强连通图
(3)连通分量
在无向图中的极大连通子图称之为该图的一个连通分量
(4) 强连通分量
在有向图中极大强连通子图称之为该图的强连通分量
代码随想录-强连通分量 代码随想录-强连通分量

  • 节点1、节点2、节点3、节点4、节点5 构成的子图是强连通分量,因为这是强连通图,也是极大图。

  • 节点6、节点7、节点8 构成的子图 不是强连通分量,因为这不是强连通图,节点8 不能达到节点6。

  • 节点1、节点2、节点5 构成的子图 也不是 强连通分量,因为这不是极大图-

4、图的构造

(1)邻接矩阵

邻接矩阵 使用 二维数组来表示图结构。 邻接矩阵是从节点的角度来表示图,有多少节点就申请多大的二维数组
例如:
有向图:grid[2][5] = 6 表示 节点2 指向 节点5,边的权值为6
无向图:grid[2][5] = 6,grid[5][2] = 6,表示节点2 与 节点5 相互连通,权值为6
(2)邻接表
邻接表 使用 数组 + 链表的方式来表示。 邻接表是从边的数量来表示图,有多少边 才会申请对应大小的链表
代码随想录-邻接表代码随想录-邻接表

  • 节点1 指向 节点3 和 节点5
  • 节点2 指向 节点4、节点3、节点5
  • 节点3 指向 节点4
  • 节点4指向节点1

5、图的遍历方式

(在邻接表或邻接矩阵上进行搜索)
(1)深度优先搜索(dfs)–递归实现
(2) 广度优先搜索(bfs)

二、深度优先搜索

1、深度优先搜索的三部曲

(1)确认递归函数,参数
深搜需要 二维数组数组结构保存所有路径,需要一维数组保存单一路径,可以定义一个全局变量,避免函数参数过多
(2)确认终止条件
(3) 处理目前搜索节点出发的路径
一个for循环的操作,去遍 目前搜索节点所能到的所有节点;
加入路径,递归调用,弹出

2、深度优先搜索框架

void dfs(参数) {
    if (终止条件) {
        存放结果;
        return;
    }

    for (选择:本节点所连接的其他节点) {
        处理节点;
        dfs(图,选择的节点); // 递归
        回溯,撤销处理结果
    }
}


三、LeetCode98. 所有可达路径

1.题目链接

LeetCode98. 所有可达路径

2.思路

(1)存图:
link[i][k]=1:指的是有i指向k的路径
(2)深度优先搜索
1)返回值:void
参数:终点,遍历到第几个点(当前点的下标),存图的数组
2)终止条件
当前遍历点下标等于终点下标
3)处理目前搜索节点出发的路径
① 遍历当前节点(下标i)对应的link[i]数组,如果link[i][k]等于1,那么i–>k路径存在
② k加入路径
③ k进行递归调用
④ k弹出路径

3.题解

#include<bits/stdc++.h>
using namespace std;
vector<vector<int>>ans ;
vector<int>path;

void dfs(int i,int n,vector<vector<int>>link)
{
    if(i==n)
    {
        ans.push_back(path);
        return ;
    }
    for(int k=1;k<=n;k++)
    {   
        if(link[i][k])
        {
            path.push_back(k);
            dfs(k,n,link);
            path.pop_back();
        }
    }
    
}
int main()
{
    int n;
    int m;
    int t1;
    int t2;
    cin>>n>>m;
    vector<vector<int>>link(n+1,vector<int>(n+1,0));
    //下标表示的点所连接的点的集合
    for(int i=0;i<m;i++)
    {
        
        cin>>t1>>t2;
      
        link[t1][t2]=1;//t1--->t2
    }
    path.push_back(1);
    dfs(1,n,link);
   
    int l=ans.size();
    if(l==0)
    {
        cout<<-1<<"\n";
    }else
    {
        for(int i=0;i<l;i++)
        {
            int r=ans[i].size();
            for(int j=0;j<r;j++)
            {
                cout<<ans[i][j];
                if(j<r-1)cout<<" ";
                if(j==r-1)cout<<"\n";
            }
        }
    }
    
    return 0;
    
}

总结

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

最全诗词近10万诗词大全ACCESS\EXCEL数据库

其实破解弄到这个数据库我没有多少喜悦&#xff0c;原因是我已有的一些诗词比如全唐诗、全宋词等加起来的话也差不多这个数&#xff0c;但是因为这个数据库是完整破解的&#xff0c;比自己用已有的诗词数据库整合来说更加的好&#xff1b; 分类情况统计&#xff1a;汉代诗词&am…

v500大程序之IIC调试

虽然写的是IIC&#xff0c;但其实在system bd中并没有勾选IIC0、IIC1&#xff0c;而是根据IIC协议写了相关的函数&#xff08;不是我写的&#xff09;。 用到的RTC是DS3231芯片。 目前遇到的问题是&#xff1a; zynq调试成功&#xff1b;fmql调试失败&#xff0c;其中年、日、…

【AD24报错】原理图编译后出现Off grid ## at的解决方案

【AD24报错】原理图编译后出现Off grid ## at的解决方案 在使用AD24进行原理图设计过程中&#xff0c;编译时出现Off grid ## at…错误。 1 错误原因 &#xff08;1&#xff09;元件放置不准确 在放置元件时&#xff0c;如果没有将元件的引脚或中心点准确地放置在网格点上&…

进程的创建、终止

目录 前言1. 进程创建2. 进程终止3. exit && _exit 的异同3.1 相同点3.2 不同点 前言 紧接着进程地址空间之后&#xff0c;我们这篇文章开始谈论进程控制相关的内容&#xff0c;其中包括进程是如何创建的&#xff0c;进程终止的几种情况&#xff0c;以及进程异常终止的…

基于vue框架的比赛门票出售的系统12lh6(程序+源码+数据库+调试部署+开发环境)系统界面在最后面。

系统程序文件列表 项目功能&#xff1a;用户,赛事类型,赛事信息,比赛队伍,比赛结果 开题报告内容 基于Vue框架的比赛门票出售系统开题报告 一、研究背景与意义 随着体育产业的蓬勃发展&#xff0c;各类体育赛事如雨后春笋般涌现&#xff0c;吸引了全球亿万观众的关注与参与…

域控ntdsutil修改架构、域命名、PDC、RID、结构主机

#笔记记录# 五大操作主机角色 架构主机&#xff08;schema master&#xff09;域命名主机&#xff08;naming master&#xff09;RID主机&#xff08;RID master&#xff09;基础架构主机&#xff08;infrastructure master&#xff09;PDC仿真器主机&#xff08;PDC&#xf…

算法力扣刷题记录 八十九【332.重新安排行程】

前言 回溯章节第13篇。 记录 八十九【332.重新安排行程】 一、题目阅读 给你一份航线列表 tickets &#xff0c;其中 tickets[i] [fromi, toi] 表示飞机出发和降落的机场地点。请你对该行程进行重新规划排序。 所有这些机票都属于一个从 JFK&#xff08;肯尼迪国际机场&am…

全网最全的Fiddler抓包的详细教学-直接收藏!

一、Fiddler与其他抓包工具的区别 c 2、Wireshark是通用的抓包工具&#xff0c;能获取HTTP&#xff0c;也能获取HTTPS&#xff0c;但是不能解密HTTPS&#xff0c;所以wireshark看不懂HTTPS中的内容&#xff0c;但如果是TCP、UDP协议可以用wireshark&#xff1b; 3、Httpwatch也…

豆包大模型迎来多维升级:综合性能提升20.3% 零售、汽车等行业落地提速

2024年无疑是科技行业公认的“AI大模型落地元年”&#xff0c;大模型应用的供需关系正在经历着前所未有的变化。 与过去AI厂商单方面探索应用场景的做法不同&#xff0c;今年我们见证了更多的重要行业和头部企业&#xff0c;在降本提效、以技术驱动新发展和新升级的需求之下&a…

AI开发者大赛 | 6道算法赛题上新

2024 AI开发者大赛正在如火如荼地进行着&#xff0c;本届比赛吸引了全球范围内的众多优秀开发者参与其中&#xff0c;用代码书写未来&#xff0c;用算法改变世界。 如今&#xff0c;算法赛新一批赛题上线&#xff0c;无论是初学者还是资深开发者&#xff0c;你都可以在2024 AI…

vue3实现系统tab标签页面切换

功能&#xff1a; 支持刷新当前、关闭其他、关闭全部、关闭当前支持打开多个相同path不同路由参数的页面&#xff0c;将fullPath作为路由页面唯一值 UI组件&#xff1a; 使用的是element-plus中的el-tab组件&#xff0c;结构目录如下 代码实现&#xff1a; 下面是 TagsView…

MATLAB水果分级系统

课题介绍 现在商业行为中&#xff0c;在水果出厂前都需要进行质量检测&#xff0c;需要将不同等级的水果进行分级包装&#xff0c;以保证商业利益最大化。可是传统方法都是依靠人工进行检测&#xff0c;效率低下&#xff0c;主观成分大&#xff0c;并不能很好客观地评价出货质…

适用于 Windows 10/11 的 2 大文件恢复软件

我很遗憾我在 Windows 10 中删除了 PC 中的数据并再次移动了它们。当我检查时&#xff0c;什么都没有。是否有任何Windows数据恢复软件&#xff0c;或者是否可以想象&#xff1f;我都会看到任何援助的价值。 文档、图像、音频等数据文件可能会因不良或危险行为而丢失&#xff…

Ollama 部署大模型

由于每次调用 OpenAI 等大模型都会产生费用&#xff0c;这个成本问题可以在开发环节可以通过私有化部署 LLM 的方式来避免。 Ollama 简介 Ollama 是一个开源的大型语言模型服务工具&#xff0c;专注于在本地运行大型语言模型。用户可以通过简单的安装指令在本地运行开源大型语…

关于Br的bean

笔者高烧了5天没有更新&#xff0c;今天终于感到热了&#xff0c;来继续更新。 JSON to Dart使用生成模型&#xff0c;首先要继承Br BR点进去把重复的内容删掉 然后去List里rename一下就好了。 然后再去

TypeError: Cannot read properties of undefined (reading ‘ciphertext‘)

ciphertext 是密文的意思&#xff0c;可能是使用插件进行解密的时候&#xff0c;密文的内容是 null 空的&#xff0c;假如密文是 null 时我们可以把密文改成空字符串就好了 例如 使用了 CryptoJS 进行加解密&#xff0c;关于 CryptoJS 的介绍可以看这篇文章 【CryptoJS】使…

基于STM32开发的智能水族箱控制系统

目录 引言环境准备工作 硬件准备软件安装与配置系统设计 系统架构硬件连接代码实现 系统初始化水温监测与调节水质监控与自动换水照明控制与状态指示Wi-Fi通信与远程控制应用场景 家庭水族箱的智能管理公共水族馆的水质监控常见问题及解决方案 常见问题解决方案结论 1. 引言 …

mp4转m4v怎么转?5种方法快速完成转换

在这个多媒体内容爆炸的时代&#xff0c;视频格式转换成为了我们日常生活中不可或缺的一部分。尤其是从MP4转换为M4V&#xff0c;这种转换不仅关乎视频播放的兼容性&#xff0c;还影响着视频质量。下面就来给大家分享5种高效转换方法&#xff0c;一起来看看吧。 方法一&#xf…

开学季数码好物分享!推荐适合学生党好用又实惠的平替电容笔!

​开学季总是伴随着满满的期待与新鲜感&#xff0c;好多小伙伴都会在这个时候规划自己的学习新篇章&#xff0c;寻找那些能够助力学习、提升效率的好帮手。在数字化时代&#xff0c;电容笔作为无纸化学习的重要工具之一&#xff0c;其重要性不言而喻。它不仅能让学习笔记更加便…

MinIO在Windows中部署,并注册服务

文章目录 一、下载二、安装1. 打开命令提示符或PowerShell(需用命令提示符窗口运行)&#xff1a;2. 切换到 D:\MinIO 目录&#xff1a; 使用 cd 命令导航到 D:\MinIO 目录3. 运行 minio.exe&#xff1a; 输入以下命令并按 Enter&#xff1a;.\minio.exe4. 退出命令行&#xff1…