我有無向圖,我需要找到圖的連接組件的數量。我將圖形表示爲Map<Integer, ArrayList<Integer>> map
(節點:連接節點列表)。然後我通過該地圖並計算連接組件優化此代碼以查找連接的組件?
int countComponents() {
for (Integer u : map.keySet()) { //all nodes
if (visited[u] == false) {
visited[u] = true;
components++;
dfs(u);
}
}
return components;
}
void dfs(int u) {
for (Integer v : map.get(u)) { //v is node connected to u
if (visited[v] == false) {
visited[v] = true;
dfs(v);
}
}
}
但是我需要更高效的算法。也許最好使用圖的另一種表示形式,或者有另外一種方法來查找連接組件的數量?