LeetCode题目,1319. Number of Operations to Make Network Connected
先看题目描述
大意就是给定一个数字 n 代表有 n 个计算机,计算机的编号从 0 到 n - 1,connection 代表线缆,connection[i] = [a, b] 代表连接了计算机 a 和 b,我们可以拔开任意两台直连计算机之间的线缆,并用它连接一对未直连的计算机。要我们计算并返回使所有计算机都连通所需的最少操作次数。如果不可能,则返回 -1
算法和思路
并查集
这题本质上就是求给定的图中的连通分量的个数,返回的结果就是连通分量的个数 - 1,给定一个图求连通分量,可以使用并查集解决;当边的个数小于 n - 1 时,一定不能连通,直接返回 -1 即可
算法源码
下面是自己一开始的思路的源码,也是使用的并查集,但和用并查集求连通分量的思路不太一样,我的思路是既然 n 个点的最小生成树有 n - 1 条边,那么当碰到一条边,它的两个顶点已连通时,先看此时的边数是否大于 n - 1,若大于 n - 1,则将这条边舍弃,将边数减 1;若此时的边数等于 n - 1,那么为了使整个图连通,必须对这条边进行操作,将结果 加 1
1 | class Solution { |
下面就是题解的代码,就是求图的连通分量的个数,然后返回连通分量的个数 - 1
1 | class Solution { |