Triển khai đồ thị vô hướng với danh sách kề, dùng DFS đệ quy để tìm các thành phần liên thông.
Ví dụ
class Graph:
def __init__(self, V):
self.V = V
self.adj = [[] for _ in range(V)]
def add_edge(self, u, v):
self.adj[u].append(v)
self.adj[v].append(u)
def dfs_util(self, v, visited, comp):
visited[v] = True
comp.append(v)
for nei in self.adj[v]:
if not visited[nei]:
self.dfs_util(nei, visited, comp)
def connected_components(self):
visited = [False] * self.V
comps = []
for v in range(self.V):
if not visited[v]:
comp = []
self.dfs_util(v, visited, comp)
comps.append(comp)
return comps
g = Graph(5)
g.add_edge(1, 0)
g.add_edge(2, 3)
g.add_edge(3, 0)
print("1-0, 2-3, 3-0")
print("Thành phần liên thông:", g.connected_components())
Kết quả
1-0, 2-3, 3-0 Thành phần liên thông: [[0, 1, 3, 2], [4]]
Giải thích
- Lớp
Graphlưu danh sách kềadj. add_edgethêm cạnh hai chiều.dfs_utilđệ quy duyệt DFS, thu thập đỉnh vàocomp.connected_componentslặp qua mọi đỉnh chưa thăm, chạy DFS, gom thành phần.- Kết quả: thành phần 1: {0,1,2,3}, thành phần 2: {4} (đỉnh cô lập).