python编程利用广度优先搜索算法确定无向图的连通分量
时间: 2023-06-14 13:04:36 浏览: 93
以下是利用广度优先搜索算法确定无向图的连通分量的Python代码:
```python
from collections import deque
def bfs(graph, start, visited):
queue = deque([start])
visited[start] = True
while queue:
vertex = queue.popleft()
for neighbor in graph[vertex]:
if not visited[neighbor]:
visited[neighbor] = True
queue.append(neighbor)
def find_connected_components(graph):
visited = {vertex: False for vertex in graph}
connected_components = []
for vertex in graph:
if not visited[vertex]:
connected_component = []
bfs(graph, vertex, visited)
for v in visited:
if visited[v]:
connected_component.append(v)
visited[v] = False
connected_components.append(connected_component)
return connected_components
# Example usage
graph = {
0: [1, 2],
1: [0, 2],
2: [0, 1, 3],
3: [2, 4],
4: [3]
}
connected_components = find_connected_components(graph)
print(connected_components)
```
这个算法首先初始化一个字典 `visited`,用于记录每个顶点是否已经被访问。然后遍历每个顶点,如果某个顶点还没有被访问,就使用 BFS 搜索它所在的连通分量。在 BFS 中,我们使用一个队列来存储待访问的顶点,以及一个 `visited` 字典来记录哪些顶点已经被访问。每次从队列中取出一个顶点,然后遍历它的所有邻居,如果某个邻居还没有被访问过,就把它加入队列中。最后,我们把访问过的顶点都从 `visited` 中清除,并把它们组成的连通分量添加到 `connected_components` 列表中。
阅读全文