zoukankan      html  css  js  c++  java
  • 力扣 684 :冗余连接

    题目描述:

      在本问题中, 树指的是一个连通且无环的无向图。

      输入一个图,该图由一个有着 N 个节点 (节点值不重复1, 2, ..., N) 的树及一条附加的边构成。

      附加的边的两个顶点包含在 1 到 N 中间,这条附加的边不属于树中已存在的边。

      结果图是一个以边组成的二维数组。每一个边的元素是一对 [u, v] ,满足 u < v,

      表示连接顶点 u 和 v 的无向图的边。返回一条可以删去的边,使得结果图是一个有着 N 个节点

      的树。如果有多个答案,则返回二维数组中最后出现的边。答案边 [u, v] 应满足相同的格式 u < v。

    示例:

      输入:[[1,2],[1,3],[2,3]]

      输出:[2,3]

      解释:给定的无向图为

        1
       / 
      2 - 3

      输入:[[1,2],[2,3],[3,4],[1,4],[1,5]]

      输出:[1,4]

      解释:给定的无向图为

      5 - 1 - 2
          |   |
          4 - 3

    综合解法(javascript实现):

    var lines_arr=[[1,2],[2,3],[3,4],[1,4],[1,5]];  //边数组;
    function filter_lines(lines){
        let node_counts=lines_arr.length;  //节点数
        let pnodes_arr=new Array(node_counts+1).fill(0).map((val,index)=>index);
        console.log('父:',pnodes_arr);
        console.log(pnodes_arr);
        for(let i=0;i<lines_arr.length;i++){
            let line=lines_arr[i];
            let node1=line[0],node2=line[1];
            if(find(pnodes_arr,node1)!==find(pnodes_arr,node2)){
                union(pnodes_arr,node1,node2);
            }else{
                return line;
            }
        }
        return null;
    }
    function find(parr,index){
        if(parr[index]!==index){
            parr[index]=find(parr,parr[index]);
        }
        return parr[index];
    }
    function union(parr,node1,node2){
        parr[node1]=find(parr,node2);
    }
    console.log('输出多余的边',filter_lines(lines_arr));

    总结:

      该算法在处理节点是否同集同父问题上简单方便,确实是一个很不错的解题方法;

      其中并查集作为关键只要掌握核心3步就可以方便解题,点击这里 可详细查看该方法。

    版权声明:本文为博主原创文章,如需转载,请标明出处

  • 相关阅读:
    怎么接音响
    怎样区分音箱与音响
    什么是卡盟
    小白晋级达人必备 电视接口使用介绍(4)
    液晶电视插有线电视信号线的是哪个接口 HDMI是什么接口
    Google 镜像站搜集
    屏幕检测
    网站引流
    夜神安卓模拟器
    html5模拟平抛运动
  • 原文地址:https://www.cnblogs.com/gamecc666/p/14635375.html
Copyright © 2011-2022 走看看