寻找存在的路径/寻找图中是否存在路径 C# 并查集

news2024/11/24 18:37:55

卡码网 107 与 力扣的1971 寻找图中是否存在路径 相似      感觉还是有点不熟悉得多练1

107. 寻找存在的路径

题目描述

给定一个包含 n 个节点的无向图中,节点编号从 1 到 n (含 1 和 n )。

你的任务是判断是否有一条从节点 source 出发到节点 destination 的路径存在。

输入描述

第一行包含两个正整数 N 和 M,N 代表节点的个数,M 代表边的个数。 

后续 M 行,每行两个正整数 s 和 t,代表从节点 s 与节点 t 之间有一条边。 

最后一行包含两个正整数,代表起始节点 source 和目标节点 destination。

输出描述

输出一个整数,代表是否存在从节点 source 到节点 destination 的路径。如果存在,输出 1;否则,输出 0。

输入示例
5 4
1 2
1 3
2 4
3 4
1 4
输出示例
1
提示信息

数据范围:

1 <= M, N <= 100。

 思路:

并查集主要有三个功能:

  1. 寻找根节点,函数:find(int u),也就是判断这个节点的祖先节点是哪个
  2. 将两个节点接入到同一个集合,函数:join(int u, int v),将两个节点连在同一个根节点上
  3. 判断两个节点是否在同一个集合,函数:isSame(int u, int v),就是判断两个节点是不是同一个根节点

    题目中各个点是双向图链接,那么判断 一个顶点到另一个顶点有没有有效路径其实就是看这两个顶点是否在同一个集合里。

    如何算是同一个集合呢,有边连在一起,就算是一个集合。

    此时我们就可以直接套用并查集模板。

    使用 join(int u, int v)将每条边加入到并查集。

    最后 isSame(int u, int v) 判断是否是同一个根 就可以了。

需要注意的点: C#中的类与构造函数的使用  本体使用构造函数主要是因为 初始化 UnionFind 类的实例,并设置并查集所需的数据结构。

构造函数的作用是:

  • 初始化并查集的核心数据结构 father 数组。
  • 保证每个节点最初是自己独立的集合的根节点。
  • 为后续的合并操作(Join)和查找操作(find)提供正确的初始状态。

作用:1. 初始化 father 数组  2. 初始化并查集结构

 

using System;

public class Program {
    public static void Main(string[] args) {
        int N, M;
        string[] firstLine = Console.ReadLine().Split();
        N = int.Parse(firstLine[0]);
        M = int.Parse(firstLine[1]);

        Unifind un = new Unifind(N + 1);  // 注意:N + 1 是因为索引从 1 开始
        for (int i = 0; i < M; ++i) { //不断输入 初始化完整个 father 数组
            string[] edge = Console.ReadLine().Split();
            un.Join(int.Parse(edge[0]), int.Parse(edge[1]));
        }
        //最后一行代表存在 节点sources到目标点 的路径 
        string[] query = Console.ReadLine().Split();
        
        
        if (un.IsSame(int.Parse(query[0]), int.Parse(query[1]))) {
            Console.WriteLine("1");
        } else {
            Console.WriteLine("0");
        }
    }
}

public class Unifind {
    private int[] father;

    public Unifind(int N) {
        father = new int[N];
        for (int i = 0; i < N; ++i) {
            father[i] = i;  // 每个节点的父节点初始化为自己
        }
    }

    // 查找操作(带路径压缩)
    public int Find(int n) {
        if (n != father[n]) {
            father[n] = Find(father[n]);  // 路径压缩
        }
        return father[n];
    }

    // 合并操作
    public void Join(int n, int m) {
        int rootN = Find(n);
        int rootM = Find(m);
        if (rootN != rootM) {
            father[rootM] = rootN;  // 将 m 的根节点指向 n 的根节点
        }
    }

    // 判断两个节点是否属于同一个集合
    public bool IsSame(int n, int m) {
        return Find(n) == Find(m);
    }
}

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

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

相关文章

【数据集】【YOLO】【目标检测】安全帽识别数据集 22789 张,YOLO安全帽佩戴目标检测实战训练教程!

数据集介绍 【数据集】安全帽识别数据集 22789 张&#xff0c;目标检测&#xff0c;包含YOLO/VOC格式标注。数据集中包含2种分类&#xff1a;{0: head, 1: helmet}&#xff0c;分别是无安全帽和佩戴安全帽。数据集来自国内外图片网站和视频截图。检测场景为施工地工人安全帽佩…

洞察鸿蒙生态,把握开发新机遇

随着科技的不断进步&#xff0c;鸿蒙系统以其独特的分布式架构和跨设备协同能力&#xff0c;逐渐在智能手机、智能穿戴、车载、家居等多个领域崭露头角&#xff0c;与安卓、iOS形成三足鼎立之势。作为一名开发者&#xff0c;我对鸿蒙生态的认知和了解如下&#xff1a; 一、鸿蒙…

Node.js 全栈开发进阶篇

​&#x1f308;个人主页&#xff1a;前端青山 &#x1f525;系列专栏&#xff1a;node.js篇 &#x1f516;人终将被年少不可得之物困其一生 依旧青山,本期给大家带来node.js篇专栏内容:node.js- 全栈开发进阶篇 前言 大家好&#xff0c;我是青山。在上一篇文章中&#xff0c;…

VS Code 插件 MySQL Shell for VS Code

https://marketplace.visualstudio.com/items?itemNameOracle.mysql-shell-for-vs-code

2024年云手机推荐榜单:高性能云手机推荐

无论是手游玩家、APP测试人员&#xff0c;还是数字营销工作者&#xff0c;云手机都为他们带来了极大的便利。本文将为大家推荐几款在市场上表现优异的云手机&#xff0c;希望这篇推荐指南可以帮助大家找到最适合自己的云手机&#xff01; 1. OgPhone云手机 OgPhone云手机是一款…

「QT」QT5程序设计专栏目录

✨博客主页何曾参静谧的博客&#x1f4cc;文章专栏「QT」QT5程序设计&#x1f4da;全部专栏「VS」Visual Studio「C/C」C/C程序设计「UG/NX」BlockUI集合「Win」Windows程序设计「DSA」数据结构与算法「UG/NX」NX二次开发「QT」QT5程序设计「File」数据文件格式「PK」Parasolid…

VMWARE ESXI VMFS阵列故障 服务器数据恢复

1&#xff1a;河南用户一台DELL R740 3块2.4T硬盘组的RAID5&#xff0c;早期坏了一个盘没有及时更换&#xff0c;这次又坏了一个&#xff0c;导致整组RAID5处于数据丢失的状态&#xff0c; 2&#xff1a;该服务器装的是VMware ESXI 6.7&#xff0c;用户把3块硬盘寄过来进行数据…

怎么对 PDF 添加权限密码或者修改密码-免费软件分享

序言 目前市面上有关PDF处理的工具有很多&#xff0c;不过绝大多数的PDF处理工具都需要付费使用&#xff0c;且很多厂商甚至连试用的机会也不给用户&#xff0c;偶有试用的&#xff0c;其试用版的条件也极为苛刻&#xff0c;比如只能处理前两页&#xff0c;或者只能处理非常小的…

轻松上云:使用Python与阿里云OSS实现文件上传

轻松上云&#xff1a;使用Python与阿里云OSS实现文件上传 ​ 在数字化时代&#xff0c;数据的存储和管理变得越来越重要。阿里云对象存储服务&#xff08;OSS&#xff09;提供了一种高效、安全的方式来存储和访问各种类型的文件。本文将介绍如何利用Python编程语言结合阿里云O…

通过包控制->获取包重新获取之后,需求类型列表不对

龙勤思(2017年11月27日)&#xff1a; 这个类型列表&#xff0c;我在把需求包提交到svn&#xff0c;再新建一个eap&#xff0c;通过包控制->获取包重新获取之后&#xff0c;就变成默认的如下列表了。我从你的原始的eap导出参考数据&#xff0c;再导入到新建的eap&#xff0c…

python+pptx:(三)添加统计图、删除指定页

目录 统计图 删除PPT页 from pptx import Presentation from pptx.util import Cm, Inches, Mm, Pt from pptx.dml.color import RGBColor from pptx.chart.data import ChartData from pptx.enum.chart import XL_CHART_TYPE, XL_LABEL_POSITION, XL_DATA_LABEL_POSITIONfil…

基础概念理解

一&#xff0c;数据结构分类 连续结构&#xff0c;跳转结构。 二&#xff0c;对变量的理解 在 C 语言中&#xff0c;变量是用于存储数据的抽象符号。变量本质上是一块内存区域的标识符&#xff08;即它代表内存中的某一块区域&#xff09;&#xff0c;用来存储数据&#xff…

【微服务】不同微服务之间用户信息的获取和传递方案

如何才能在每个微服务中都拿到用户信息&#xff1f;如何在微服务之间传递用户信息&#xff1f; 文章目录 概述利用微服务网关做登录校验网关转微服务获取用户信息openFeign传递微服务之间的用户信息 概述 要在每个微服务中获取用户信息&#xff0c;可以采用以下几种方法&#…

5G NR:各物理信道的DMRS配置

DMRS简介 在5G中&#xff0c;DMRS&#xff08;DeModulation Reference Signal&#xff09;广泛存在于各个重要的物理信道当中&#xff0c;如下行的PBCH&#xff0c;PDCCH和PDSCH&#xff0c;以及上行的PUCCH和PUSCH。其最为重要的作用就是相干解调&#xff08;Coherence Demodu…

使用Docker快速部署FastAPI Web应用

Docker是基于 Linux 内核的cgroup、namespace以及 AUFS 类的Union FS 等技术&#xff0c;对进程进行封装隔离&#xff0c;一种操作系统层面的虚拟化技术。Docker中每个容器都基于镜像Image运行&#xff0c;镜像是容器的只读模板&#xff0c;容器是模板的一个实例。镜像是分层结…

「QT」几何数据类 之 QRectF 浮点型矩形类

✨博客主页何曾参静谧的博客&#x1f4cc;文章专栏「QT」QT5程序设计&#x1f4da;全部专栏「VS」Visual Studio「C/C」C/C程序设计「UG/NX」BlockUI集合「Win」Windows程序设计「DSA」数据结构与算法「UG/NX」NX二次开发「QT」QT5程序设计「File」数据文件格式「PK」Parasolid…

2024双十一有什么是宝妈们值得入手的?双十一母婴必买清单

随着双十一购物狂欢节的临近&#xff0c;宝妈们纷纷开始筹备为家庭增添新的宝贝。作为一年一度的大型促销活动&#xff0c;双十一不仅提供了各种优惠&#xff0c;更是宝妈们囤货的好时机。2024双十一有什么是宝妈们值得入手的&#xff1f;在这个特殊的日子里&#xff0c;母婴产…

VMware Fusion和centos 8的安装

资源 本文用到的文件&#xff1a;centos8镜像 , VMware 软件包 , Termius 文件链接: https://pan.baidu.com/s/1kOES_ZJ8NGN-BnJl6NC7Sg?pwd63ct 安装虚拟机 先 安装 vmware &#xff0c;然后打开&#xff0c;将下载的 iso 镜像拖入 拖入镜像文件iso Continue, 然后随便选…

返回对象的唯一标识符通常是对象的内存地址id(对象或变量)

【小白从小学Python、C、Java】 【考研初试复试毕业设计】 【Python基础AI数据分析】 返回对象的唯一标识符 通常是对象的内存地址 id(对象或变量) [太阳]选择题 根据题目代码&#xff0c;执行的结果是&#xff1f; a [1, 2, 3] b a c a.copy() print("【显示】id(a) &…

SAP ABAP开发学习——WDA 四

目录 页面技术的发展 WebDynpro Layout控件 Layout的组件结构 布局方式 流式布局FlowLayout ​编辑 行布局RowLayout 矩阵布局MatrixLayout 网格布局GridLayout 数据绑定 在屏幕上显示数据 数据的双向传输 通过数据绑定控制UI显示 属性节点类型 属性的数据类型 …