LeetCode 323. Number of Connected Components in an Undirected Graph
原题链接:https://leetcode.com/problems/number-of-connected-components-in-an-undirected-graph/
并查集做法。开辟一个数组保存他的parent。为了方便设了一个set保存root节点。
public class Solution {
public int countComponents(int n, int[][] edges) {
HashSet<Integer> root = new HashSet();
if(n == 0){
return 0;
}
int [] nodes = new int[n];
for(int i = 0; i < n; i++){
nodes[i] = i;
root.add(i);
}
for(int [] tmp : edges){
int node1 = tmp[0];
int node2 = tmp[1];
int root1 = find_root(node1, nodes);
int root2 = find_root(node2, nodes);
nodes[root1] = nodes[root2] = root2;
if(root.contains(root1) == true){
root.remove(root1);
}
if(root.contains(root2) == false){
root.add(root2);
}
}
return root.size();
}
private int find_root(int node, int[] nodes){
while(node != nodes[node]){
node = nodes[node];
}
return node;
}
}