[
graph
dfs
bfs
graph algo
union find
]
Leetcode 0323. Number of Connected Components in an Undirected Graph
Problem statement
https://leetcode.com/problems/number-of-connected-components-in-an-undirected-graph/
Solution
All we need to do is to run dfs
(or bfs
) from all possible starts if node is not visited yet and calculate number of components.
Complexity
It is just $O(E+n)$ for time and $O(n)$ for space. If we have used union find with ranks and path compression it would be the same.
Code
class Solution:
def countComponents(self, n, edges):
graph = defaultdict(list)
visited = [0]*n
for x, y in edges:
graph[x].append(y)
graph[y].append(x)
def dfs(node, color):
visited[node] = color
for neib in graph[node]:
if visited[neib] == 0:
dfs(neib, color)
col = 1
for i in range(n):
if visited[i] == 0:
dfs(i, col)
col += 1
return max(visited)