У меня есть неориентированный граф, и мне нужно найти число связанных компонентов графа. Я представляю график как 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);
}
}
}
Но мне нужен более эффективный алгоритм. Может быть, лучше использовать другое представление графика или есть другие способы найти количество подключенных компонентов?