Leetcode 323. Number of Connected Components in an Undirected Graph
题目
Given n nodes labeled from 0 to n - 1 and a list of undirected edges (each edge is a pair of nodes), write a function to find the number of connected components in an undirected graph.
解法1:DFS
- 每次DFS除去一条联通路,并且将DFS过程中已经访问过的节点放入set中
- 若当前访问的节点在之前的路径中已经被访问,证明当前节点属于已经产生的联通路中
- 否则从这个节点开始开辟一条新路径
class Solution:
def countComponents(self, n: int, edges: List[List[int]]) -> int:
helper(u):
if u in pair:
for v in pair[u]:
if v not in visited:
visited.add(v)
helper(v)
pair = collections.defaultdict(set)
for u,v in edges:
pair[u].add(v)
pair[v].add(u)
count = 0
visited = set()
for i in range(n):
if i not in visited:
helper(i)
count+=1
return count
时间复杂度:O(E), E为边的条数
空间复杂度:O(E+N),N为节点个数
解法2:unionfind
解析参见代码注释
class Solution:
def countComponents(self, n: int, edges: List[List[int]