并查集-学习应用

本文探讨了并查集这一数据结构,并将其应用于解决如何将无向图转化为无环图的问题,通过添加和移除边来达到目标,同时介绍了在Java中实现并查集的技巧。
摘要由CSDN通过智能技术生成

一个树即无向图,添加一条边成为无向有环图,去除多余的边,使得图成为无环图。同理可以推广到去除多个边。

 /**
     * 有环图去除一条边使得无环图。
     * 遍历到一条边时,如果两个点不连通,则属于不同的连通分量,对两个进行合并即可
     * 否则添加该条边则成环。
     * @param edges
     * @return
     */
    public int[] findRedundantConnection(int[][] edges) {
        int n = edges.length;
        int parent[] = new int[n + 1];
        //边进行初始化,初始化自己为父结点
        for (int i = 0; i < n; i++) {
            parent[i] = i;
        }
        for (int i = 0; i < n; i++) {
            int edge[] = edges[i];
            int node1 = edge[0];
            int node2 = edge[1];
            //不连通,则进行连通合并,从起点指向父结点
            if (find(parent, node1) != find(parent, node2)) {
                union(parent, node1, node2);
            } else {
                return edge;
            }
        }
        return new int[0];
    }

    public void union(i
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值