給定編號從 0 到 n-1 的 n 個節點和一個無向邊列表(每條邊都是一對節點),請編寫一個函數來計算無向圖中連通分量的數目。
示例 1:
輸入: n = 5 和 edges = [[0, 1], [1, 2], [3, 4]]
? ? ?0 ? ? ? ? ?3
? ? ?| ? ? ? ? ?|
? ? ?1 --- 2 ? ?4?
輸出: 2
示例 2:
輸入: n = 5 和 edges = [[0, 1], [1, 2], [2, 3], [3, 4]]
? ? ?0 ? ? ? ? ? 4
? ? ?| ? ? ? ? ? |
? ? ?1 --- 2 --- 3
輸出:??1
注意:
你可以假設在 edges 中不會出現重復的邊。而且由于所以的邊都是無向邊,[0, 1] 與 [1, 0]??相同,所以它們不會同時在 edges 中出現。
思路:并查集,一直合并,最后查有幾個根即可
class Solution {int[] parent;//這是記錄關系的數組//查找int find(int parent[], int i) {if (parent[i] == -1)return i;return find(parent, parent[i]);}//合并void union(int parent[], int x, int y) {int xset = find(parent, x);int yset = find(parent, y);if (xset != yset)parent[xset] = yset;}public int countComponents(int n, int[][] edges) {int len=edges.length;parent = new int[n];Arrays.fill(parent, -1);for (int i = 0; i < len; i++) {union(parent, edges[i][0], edges[i][1]);}int count = 0;//查根的數量for (int i = 0; i < n; i++)if (parent[i] == -1)count++;return count;}
}
?