题目
思路
- 并查集
- 深度优先构建图
代码
连通网络的操作次数//1.并查集int res;public int makeConnected(int n, int[][] connections) {if (connections.length < n - 1) return -1;int[] s = new int[n];res = n;//初始化Arrays.fill(s, -1);//构建并查集for (int[] connection : connections) {union(s, connection[0], connection[1]);}return res - 1; //因为合并的时候是两个,要在最后结果多减一个}//合并public void union(int[] s, int i, int j) {int ri = findFC(s, i), rj = findFC(s, j);if (ri != rj) {s[ri] = rj;//每合并一个说明少一个需要连接res--;}}//压缩路径查找,目的是为了降低高度,提高查找速度public int findFC(int[] s, int i) {if (i < 0 || i >= s.length) return -1;if (s[i] < 0) return i;s[i] = findFC(s, s[i]);return s[i];}
