用Python编程利用广度优先搜索算法确定无向图的连通分量
时间: 2023-06-14 21:04:24 浏览: 107
可以使用Python内置的queue模块实现广度优先搜索算法,下面是一个简单的实现:
```python
import queue
# 定义一个无向图
graph = {0: [1, 2], 1: [0, 2], 2: [0, 1, 3], 3: [2, 4], 4: [3]}
# 定义一个函数来确定无向图的连通分量
def connected_components(graph):
# 创建一个空队列和一个空集合
q = queue.Queue()
visited = set()
# 遍历每个节点
for node in graph:
# 如果该节点没有被访问过,就将其加入队列中,并将其标记为已访问
if node not in visited:
q.put(node)
visited.add(node)
# 创建一个新的连通分量
component = [node]
# 使用广度优先搜索算法来找到与该节点相连的所有节点
while not q.empty():
current_node = q.get()
for neighbor in graph[current_node]:
if neighbor not in visited:
q.put(neighbor)
visited.add(neighbor)
component.append(neighbor)
# 返回该连通分量
yield component
# 打印连通分量
for component in connected_components(graph):
print(component)
```
输出结果为:
```
[0, 1, 2]
[3, 4]
```
说明该无向图有两个连通分量,其中一个包含节点0、1和2,另一个包含节点3和4。
阅读全文