Leetcode1971. 寻找图中是否存在路径

计算机网络简答题 协议定义了在两个或多个通信实体之间交换的报文格式和顺序,以及发送接收报文以及其他事件需要采取的操作。为。 阅读详情

Every day a Leetcode

题目来源:1971. 寻找图中是否存在路径

解法1:并查集

并查集介绍:并查集详解

代码:

/*
 * @lc app=leetcode.cn id=1971 lang=cpp
 *
 * [1971] 寻找图中是否存在路径
 */

// @lc code=start
class UnionFind
{
    vector<int> father, size;

public:
    UnionFind(int n) : father(n), size(n, 1)
    {
        // iota函数可以把数组初始化为 0 到 n-1
        iota(father.begin(), father.end(), 0);
    }
    int find(int x)
    {
        if (x == father[x])
            return x;
        else
            return find(father[x]);
    }
    void connect(int p, int q)
    {
        int fa_p = find(p), fa_q = find(q);
        if (fa_p != fa_q)
            father[fa_p] = fa_q;
    }
    bool isConnected(int p, int q)
    {
        return find(p) == find(q);
    }
};

class Solution
{
public:
    bool validPath(int n, vector<vector<int>> &edges, int source, int destination)
    {
        UnionFind uf(n);
        for (vector<int> &edge : edges)
            uf.connect(edge[0], edge[1]);
        return uf.isConnected(source, destination);
    }
};
// @lc code=end

结果:

在这里插入图片描述

复杂度分析:

时间复杂度:O(n+m×α(m)),其中 n 是图中的顶点数,m 是图中边的数目,α 是反阿克曼函数。并查集的初始化需要 O(n) 的时间,然后遍历 m 条边并执行 m 次合并操作,最后对 source 和 destination 执行一次查询操作,查询与合并的单次操作时间复杂度是 O(α(m)),因此合并与查询的时间复杂度是 O(m×α(m)),总时间复杂度是 O(n+m×α(m))。

空间复杂度:O(n),其中 n 是图中的顶点数。并查集需要 O(n) 的空间。

解法2:深度优先搜索

首先从顶点 source 开始遍历并进行递归搜索。搜索时每次访问一个顶点 vertex 时,如果 vertex 等于 destination 则直接返回,否则将该顶点设为已访问,并递归访问与 vertex 相邻且未访问的顶点 next。如果通过 next 的路径可以访问到 destination,此时直接返回 true,当访问完所有的邻接节点仍然没有访问到 destination,此时返回 false。

代码:

class Solution
{
public:
    bool dfs(int source, int destination, vector<vector<int>> &adj, vector<bool> &visited)
    {
        if (source == destination)
        {
            return true;
        }
        visited[source] = true;
        for (int next : adj[source])
        {
            if (!visited[next] && dfs(next, destination, adj, visited))
            {
                return true;
            }
        }
        return false;
    }

    bool validPath(int n, vector<vector<int>> &edges, int source, int destination)
    {
        vector<vector<int>> adj(n);
        for (auto &edge : edges)
        {
            int x = edge[0], y = edge[1];
            adj[x].emplace_back(y);
            adj[y].emplace_back(x);
        }
        vector<bool> visited(n, false);
        return dfs(source, destination, adj, visited);
    }
};

结果:

在这里插入图片描述

复杂度分析:

时间复杂度:O(n+m),其中 n 表示图中顶点的数目,m 表示图中边的数目。

空间复杂度:O(n+m),其中 n 表示图中顶点的数目,m 表示图中边的数目。空间复杂度主要取决于邻接顶点列表、记录每个顶点访问状态的数组和递归调用栈,邻接顶点列表需要 O(m+n) 的存储空间,记录每个顶点访问状态的数组和递归调用栈分别需要 O(n) 的空间。

uCOS中的消息邮箱(:task与task之间传递一个数据(数据缓冲区)) 程序需求,需要完成task与task之间  字符数组的数据传输 比如:在ucos中,串口2接收的字符数组是不定时的&不定长的;只有当接收到数据的时候_才将数据赋值给新数组 具体的程序示意如下: 图1:消息邮箱测试中的     向消息邮箱发送消息(OSMboxPost(Str_Box,(void*)rec);//发送消息--(向 消息邮箱_msg_key发送消息) ),实际项目需求的 阅读详情

相关推荐

NOAA气象数据下载攻略

各方搜寻气象数据下载途径,发现网上最多的就是从NOAA下载,但是中途有尝试过很多次都没有下载到,每次都是显示不可用,今天终于下载成功了,特此记录。 首先我是从这个网址进入的:National Centers for Environmental Information (NCEI) formerly known as National Climatic Data Center (NCDC) | NCEI offers access to the most significant archives of oc

lianqian66的博客 3万+

1971.力扣LeetCode_寻找图中是否存在路径

本文对比了三种判断图中两点连通性的算法:1. 并查集通过集合管理实现,初始化各节点为独立集合,遍历边进行集合合并,最后检查起点终点是否同属一个集合。优势是时间复杂度低(O(1))、代码简洁,适合仅需判断连通性的场景。2. DFS采用链表邻接表存储图结构,递归深度优先遍历,标记已访问节点避免循环。优势是可回溯路径,但存在栈溢出风险,适合节点数适中的场景。3. BFS同样使用链表邻接表,但以数组模拟队列实现广度优先的层级遍历。优势是天然适合无权图最短路径问题,无递归风险,适合层级清晰的图结构。三种方法各具特色,

2401_82472941的博客 1375

基于GEC6818开发板的C/C++贪吃蛇小游戏

f.开始游戏(进入游戏,并没有马上开游戏,需要点击播放才能开始)2.相关宏,全局变量(可以根据自己需要进行修改)k.显示文字前的相关初始化。k.自定义font.h文件。1.需要的主要头文件。l.在开发板上显示字1。m.在开发板上显示字2。a.显示固定大小图片。h.线程1:获得坐标。

2301_77273301的博客 2133

【LeetCode每日一题】——1971.寻找图中是否存在路径

有一个具有 n 个顶点的 双向 图,其中每个顶点标记从 0 到 n - 1(包含 0 和 n - 1)。图中的边用一个二维整数数组 edges 表示,其中 edges[i] = [ui, vi] 表示顶点 ui 和顶点 vi 之间的双向边。 每个顶点对由 最多一条 边连接,并且没有顶点存在与自身相连的边。 请你确定是否存在从顶点 source 开始,到顶点 destination 结束的 有效路径 。

IronmanJay 1395

Andriod应用开发基础项目——记账本

本项目采用Java语言编写,是一款基于Android Studio开发的简易项目,本项目可以提高Java语言编写软件的能力,同时加深对开发软件Android studio有了更深层次的掌握,很适合初学者。在项目过程中,遇到了一些挑战和问题,但通过不断的努力和学习,最终取得了成功。未来,可以还可以继续优化App的功能和性能,增加更多实用的功能,提升用户体验。

eryasd的博客 3469

PostgreSQL使用 pg_rman物理备份搭建流复制备库(streaming replication standby)

摘要:使用pg_rman备份搭建PostgreSQL流复制备库 本文详细介绍了利用pg_rman工具快速搭建PostgreSQL流复制备库的完整流程。该方法结合物理备份的高效性和流复制的实时性,特别适合大型数据库环境。主要内容包括:主库上的pg_rman安装配置、全量备份操作;备份文件传输至备库;备库数据目录准备及恢复;流复制参数配置;以及最终的启动验证步骤。文章还提供了架构示意图和关键配置示例,并包含常见问题排查建议,如备库无法启动或复制卡顿情况的处理方法。整个流程强调通过.pgpass文件管理密码的安全

liumangtuzi888的博客 1169

leetcode1971. 寻找图中是否存在路径-easy

图中的边用一个二维整数数组 edges 表示,其中 edges[i] = [ui, vi] 表示顶点 ui 和顶点 vi 之间的双向边。输入:n = 6, edges = [[0,1],[0,2],[3,5],[5,4],[4,3]], source = 0, destination = 5。输入:n = 3, edges = [[0,1],[1,2],[2,0]], source = 0, destination = 2。解释:不存在由顶点 0 到顶点 5 的路径.不存在指向顶点自身的边。

weixin_37253733的博客 2167

机器学习实例(预测房价中位数)(附代码)

1、下载数据: 下载一个压缩文件housing.tgz即可,其包含housing.csv(已经包含书有数据。),用 tax xzf housing.tgz 来解压提取CSV文件。 import os import tarfile import urllib.request DOWNLOAD_ROOT = "https://raw.githubusercontent.com/ageron/handson-ml2/master/" HOUSING_PATH = os.path.join("datasets",

qq_51153436的博客 2763

LeetCode1971. 寻找图中是否存在路径

LeetCode1971. 寻找图中是否存在路径

Love Peace 1093

告别屏幕闪烁:手把手教你用示波器抓取并分析MIPI DSI信号(以RK平台为例)

本文详细介绍了如何利用示波器抓取并分析MIPI DSI信号,以解决LCD屏幕闪烁、花屏等问题。以RK平台为例,从工具准备、示波器参数配置到信号捕获与波形解读,提供了一套完整的调试方案,帮助硬件工程师快速定位和解决显示接口信号完整性问题。

weixin_33704591的博客 656

SystemUI-下拉去掉后去掉用户切换-去掉电源按键中的紧急呼叫

这里自己倒腾完成了两个常见需求:去除用户切换、去除紧急呼叫UI在去除用户切换时候,用到了Compose知识点,所以很难按照以前经验去找对应布局、找对应的View Item ,以往方法都只能部分借鉴的搞系统的还是要跟着谷歌学一点Compose技能了,方便日常开发调试。

十年饮冰,难凉热血 1464

LeetCode力扣——并查集:947. 移除最多的同行或同列石头,1971. 寻找图中是否存在路径,2424. 最长上传前缀

这段代码的目的是计算在给定二维平面上的一系列点(由整数坐标表示)中,可以移除的点的最大数量,使得剩下的点无法通过水平或垂直方向与其他点相连。如果当前点已经被访问过,则直接返回。遍历当前点的相邻点列表,对每个未访问的相邻点递归调用。块石头放置在二维平面中的一些整数坐标点上。方法:功能:这个方法用于将指定编号的视频标记为已上传,即将视频编号添加到集合。初始化为 1,表示当前最长上传前缀的下一个期望视频编号。边连接,并且没有顶点存在与自身相连的边。个视频的上传序列,每个视频编号为。,用于存储已经上传的视频编号。

u014114223的博客 1064

支付宝个人年度账单爬虫实战:从扫码登录到数据解析的全链路解析

作为一名数据爱好者或量化分析师,获取自己的支付宝年度账单不仅是对个人消费行为的深度复盘,更是实现"数据自主权"的第一步。print(f"{row['year']}年: 收入{row['total_income']:.2f} | 支出{row['total_expense']:.2f} | 结余{row['net_savings']:.2f}"){"category": "餐饮", "amount": 12000, "count": 345},"""打开登录页,等待用户扫码,返回Cookie字典"""

2201_76125261的博客 334

leetcode1971.寻找图中是否存在路径

初尝并查集,直接套用模板。

weixin_74175349的博客 249

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

力扣1971.寻找图中是否存在路径

本文研究了无向图中顶点连通性判断问题,针对大规模数据(顶点数达2×10^5)提出两种高效解法。并查集方法通过路径压缩和按秩合并优化,实现接近线性的时间复杂度;BFS方法通过邻接表存储和队列遍历确保高效性。实验表明两种方法均能有效处理大规模图数据,其中并查集在空间效率上更具优势。文章详细阐述了两种算法的实现细节,包括数据结构设计、核心操作流程和复杂度分析,为大规模图连通性问题提供了实用解决方案。

2401_89332662的博客 765

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

【LeetCode】1971. 寻找图中是否存在路径

day48 这一道题是图论的基本题,分别使用了 「并查集」、「DFS」、「BFS」三种方法,基本都是套模板,以后做到图论相关的题可以回来找模板。【简单】

weixin_43894455的博客 641

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

LeetCode 1971. 寻找图中是否存在路径

LeetCode 1971. 寻找图中是否存在路径 有一个具有 n 个顶点的 双向 图,其中每个顶点标记从 0 到 n - 1(包含 0 和 n - 1)。图中的边用一个二维整数数组 edges 表示,其中 edges[i] = [ui, vi] 表示顶点 ui 和顶点 vi 之间的双向边。 每个顶点对由 最多一条 边连接,并且没有顶点存在与自身相连的边。 请你确定是否存在从顶点 source 开始,到顶点 destination 结束的 有效路径 。 给你数组 edges 和整数 n、source 和

<font color="Pink">Tisfy的博客</font> 597

python-leetcode-1971. 寻找图中是否存在路径

这是一个典型的问题,我们可以用或来判断从source是否能到达。

Lucy_wzw的博客 220

LeetCode: 1971. 寻找图中是否存在路径

有一个具有 n 个顶点的双向图,其中每个顶点标记从 0 到 n - 1(包含 0 和 n - 1)。图中的边用一个二维整数数组 edges 表示,其中 edges[i] = [ui, vi] 表示顶点 ui 和顶点 vi 之间的双向边。每个顶点对由最多一条边连接,并且没有顶点存在与自身相连的边。 请确定是否存在从顶点 source 开始,到顶点 destination 结束的有效路径。

WZHao000的博客 1033

[力扣题解] 1971. 寻找图中是否存在路径

长度是边的个数,可不一定相等哦!注意数组不要越界了,

东皇太一在此的博客 568

【算法与数据结构】1971、LeetCode寻找图中是否存在路径

所有的LeetCode题解索引,可以看这篇文章——。

晚安的博客 902

LeetCode 每日一题——1971. 寻找图中是否存在路径

LeetCode 每日一题——1971. 寻找图中是否存在路径

SK_Jaco的博客 421

力扣(LeetCode)1971. 寻找图中是否存在路径(C++)

【墨染】bfs模板。

墨染 271

Leetcode.1971 寻找图中是否存在路径

输入:n = 6, edges = [[0,1],[0,2],[3,5],[5,4],[4,3]], source = 0, destination = 5。输入:n = 3, edges = [[0,1],[1,2],[2,0]], source = 0, destination = 2。解释:不存在由顶点 0 到顶点 5 的路径.边连接,并且没有顶点存在与自身相连的边。图,其中每个顶点标记从。存在 有效路径 ,则返回。请你确定是否存在从顶点。开始访问,如果能访问到。记录访问过的结点,用。

感觉画质不如...原神的博客 564

(并查集) 1971. 寻找图中是否存在路径 ——【Leetcode每日一题】

1971. 寻找图中是否存在路径 有一个具有 n 个顶点的 双向 图,其中每个顶点标记从 0 到 n - 1(包含 0 和 n - 1)。图中的边用一个二维整数数组 edges 表示,其中 edges[i] = [ui, vi] 表示顶点 ui 和顶点 vi 之间的双向边。 每个顶点对由 最多一条 边连接,并且没有顶点存在与自身相连的边。 请你确定是否存在从顶点 source 开始,到顶点 destination 结束的 有效路径 。 给你数组 edges 和整数 n、source 和 destinat

weixin_43412762的博客 803

【图论刷题-5】力扣 1971. 寻找图中是否存在路径

图论刷题 机器人的运动范围 矩阵中的路径 图像渲染 水位上升的泳池中游泳 1971. 寻找图中是否存在路径 力扣原题 地址 难度与标签 简单难度 深度优先遍历 广度优先遍历 并查找 题目描述 有一个具有 n 个顶点的 双向 图,其中每个顶点标记从 0 到 n - 1(包含 0 和 n - 1)。图中的边用一个二维整数数组 edges 表示,其中 edges[i] = [ui, vi] 表示顶点 ui 和顶点 vi 之间的双向边。 每个顶点对由 最多一条 边连接,并且没有顶点存在与自身相连的边。

Smileyan's blog 1万+
上一篇: Leetcode1838. 最高频元素的频数
下一篇: Qt 项目实战 | 多界面文本编辑器
UestcXiye
博客等级 码龄8年 9031粉丝 1306原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

UestcXiye

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值