并查集(持续更新)

本文介绍了并查集这一数据结构,并通过三个具体的例题展示了其在解决图的连通性问题,如寻找多余边、判断节点间关系等方面的有效性。并查集的主要操作包括Find和Union,用于确定元素所属集合和合并集合。通过并查集,可以高效地处理无向图的连通性问题,从而在算法竞赛和实际编程中得到广泛应用。
摘要由CSDN通过智能技术生成

并查集的基本思想:将具有一定联系的节点,凑成一个集合
官方解释:并查集(Union-find Data Structure)是一种树型的数据结构。它的特点是由子结点找到父亲结点,用于处理一些不交集(Disjoint Sets)的合并及查询问题。
Find:确定元素属于哪一个子集。它可以被用来确定两个元素是否属于同一子集。
Union:将两个子集合并成同一个集合。

例题1:有 n 个城市,其中一些彼此相连,另一些没有相连。如果城市 a 与城市 b 直接相连,且城市 b 与城市 c 直接相连,那么城市 a 与城市 c 间接相连。

省份 是一组直接或间接相连的城市,组内不含其他没有相连的城市。

给你一个 n x n 的矩阵 isConnected ,其中 isConnected[i][j] = 1 表示第 i 个城市和第 j 个城市直接相连,而 isConnected[i][j] = 0 表示二者不直接相连。

返回矩阵中 省份 的数量。(力扣:547)

在这里插入图片描述

// 使用并查集来解题:
// 什么是并查集简单的来说就是使用:按照一定的规则为连通在一起的节点选出一个公共的符父节点,
// 然后再寻找集合中有多少个父节点
 class Solution {
   
      public int findCircleNum(int[][] isConnected) {
   
          int len=isConnected.length;
        //  创建一个数组来保存当前节点的父节点
        int[] parents=new int[len];
        // 为每个节点初始化父节点
        for(int i=0;i<len;i++){
   
            parents[i]=i;
        }
        // 寻找由联系的节点为他们选出父节点
        for(int i=0;i<len;i++){
   
            for(int j=0;j<isConnected[0].length;j++){
   
                if(isConnected[i][j]==1){
   
                    // 如果他们之间有联系,则将他们合并
                    union(parents,i,j);
                }
            }
        }
        //  不能使用set因为有的节点的父节点是没有指向代表节点,但它的父父节点指向了代表节点
        // // 合并完后看看parent数组中的不同的值有多少个,这里我们可以使用set
        // Set <Integer> set=new HashSet<Integer>();
        // // 将parents中的值添加道set集合中去
        // for(int i=0;i<len;i++){
   
        //     set.add(parents[i]);
        // }
        // // 返回结果
        // return set.size();
        int circles = 0;
        for (int i = 0; i < len; i++) {
   
            if (parents[i] == i) {
   
                circles++;
            }
        }
        return circles;

    }

    // 创建一个合并函数,规则是由我们自己定义的,例如我们可以让两个相连的节点的后一个节点作为父节点
    public void union(
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值