首页 > 其他分享 >寻找图中是否存在路径

寻找图中是否存在路径

时间:2023-06-25 19:56:22浏览次数:35  
标签:destination int 路径 寻找 source edges 图中 顶点

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

请你确定是否存在从顶点 source 开始,到顶点 destination 结束的 有效路径 。

给你数组 edges 和整数 n、source 和 destination,如果从 source 到 destination 存在 有效路径 ,则返回 true,否则返回 false 。

示例 1:

输入:n = 3, edges = [[0,1],[1,2],[2,0]], source = 0, destination = 2
输出:true
解释:存在由顶点 0 到顶点 2 的路径:

  • 0 → 1 → 2
  • 0 → 2
    示例 2:

输入:n = 6, edges = [[0,1],[0,2],[3,5],[5,4],[4,3]], source = 0, destination = 5
输出:false
解释:不存在由顶点 0 到顶点 5 的路径.

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/find-if-path-exists-in-graph
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

并查集

class Solution {
    int[] p;
    public boolean validPath(int n, int[][] edges, int source, int destination) {
        //并查集方法:把两个不相交的集合合并为一个集合
        //1.find(x) 函数用于查找 x 所在集合的祖宗节点
        //2.union(a, b) 函数用于合并 a 和 b 所在的集合
        p = new int[n];
        for(int i = 0;i<n;i++){
            p[i] = i;
        }
        union(edges);
        return find(source) == find(destination);
    }
    private void union(int[][] edges){
        for(int[] e : edges){
            //找到x的根和y的根,并且把x做为y的根进行合并
            p[find(e[0])] = find(e[1]);
        }
    }
    private int find(int x){
        //当
        if(p[x]!=x){
            p[x] = find(p[x]);
        }
        return p[x];
    }
}

标签:destination,int,路径,寻找,source,edges,图中,顶点
From: https://www.cnblogs.com/xiaochaofang/p/17503809.html

相关文章

  • django 如何在序列化器中抛出错误 并且在视图中捕捉返回给前端
    1.在create()中抛出错误classYourSerializer(serializers.Serializer):defcreate(self,validated_data):#进行数据验证是否满足条件#得到数据过程以省略condition=Falseifnotcondition:#抛出ValidationError异常,......
  • 【python基础】文件-文件路径
    1.文件路径我们发现不管是写入还是写出操作,我们提供的都是文件名,其实这里准确说应该是文件路径。当我们简单把文件名传递给open函数时,Python将在当前执行程序的文件所在的目录中查找文件名所代表的文件。根据组织文件的方式,可能需要打开不在当前执行程序文件所属目录中的文件。......
  • MacBook 无法删除xxx,因为其路径太长
    一、问题描述MacBook,因目录出现递归嵌套,放入回收站后,想彻底删除时报【无法删除xxx,因为其路径太长】导致无法删除。本想通过命令行删除,但此目录又无法还原到原位置,导致拿不到其绝对路径,删除不了,这个报错还会阻断回收站的一键清倒功能,实在不便。二、解法打开命令行终端。先在......
  • 代码随想录算法训练营第十六天| 找树左下角的值 路径总和 从中序与后序遍历序列
    找树左下角的值1,层序遍历,较为简单:1intfindBottomLeftValue_simple(TreeNode*root){2intresult=0;3if(!root)returnresult;4queue<TreeNode*>selected;5selected.push(root);67while(!selected.empty())8{9......
  • leetcode 113 路径总和2 path-sum-ii【ct】
    ===思路:很简单,记得递归的时候传入path.slice ......
  • 代码随想录算法训练营第十五天| 110.平衡二叉树 (优先掌握递归) 257. 二叉树的所有路径
     110.平衡二叉树(优先掌握递归)难点:要求每个节点的左右字数的高度相减<=1,因此,需要对每个节点都进行检查,难就难在怎么获得任意节点的高度其中递归是最简单的: 1intisB_cursor(TreeNode*node,bool&isBalance)2{3if(isBalance==false)return0;4if......
  • 机器学习新书-解决几乎任何机器学习问题路径
    本书介绍    在处理机器学习问题时,通常有两种类型的数据(和机器学习模型)    监督数据:总是有一个或多个目标与之相关联。    无监督数据:没有任何目标变量。    有监督的问题比无监督的问题更容易解决。要求预测一个值的问题被称为监督问题。例如,如果问题是预测给......
  • webdriver根据XPath相对路径获取元素
    webdriver根据XPath相对路径获取元素#encoding=utf-8importtimefromseleniumimportwebdriverfromselenium.webdriver.common.byimportBydriver=webdriver.Chrome()#打开百度首页driver.get("https://passport.meituan.com/account/unitivelogin?")#根据相对......
  • webdriver根据绝对路径标签id属性进行定位
    webdriver根据绝对路径标签id属性进行定位#encoding=utf-8importtimefromseleniumimportwebdriverfromselenium.webdriver.common.byimportBydriver=webdriver.Chrome()#打开百度首页driver.get("https://passport.meituan.com/account/unitivelogin?")#根......
  • linux怎么查看jdk安装路径
    linux查看jdk安装路径方法1:使用echo$JAVA_HOME使用$JAVA_HOME的话能定位JDK的安装路径的前提是配置了环境变量$JAVA_HOME,否则如下所示,根本定位不到JDK的安装路径方法2:使用rpm-qa|grepjava如果JDK是源码安装的话,那么这个方法也是行不通的。也就是说rpm–qlpackagename......