利用python广度优先搜索编程实现确定无向图的连通分量。
时间: 2024-02-27 11:55:44 浏览: 84
好的,以下是利用Python实现无向图连通分量的广度优先搜索算法:
```python
from collections import defaultdict
# 无向图类
class Graph:
def __init__(self):
self.graph = defaultdict(list)
# 添加边
def add_edge(self, u, v):
self.graph[u].append(v)
self.graph[v].append(u)
# 广度优先搜索
def bfs(self, v, visited):
queue = []
queue.append(v)
visited[v] = True
while queue:
s = queue.pop(0)
print(s, end=" ")
for i in self.graph[s]:
if visited[i] == False:
queue.append(i)
visited[i] = True
# 连通分量
def connected_components(self):
visited = [False] * (max(self.graph) + 1)
for i in list(self.graph):
if visited[i] == False:
self.bfs(i, visited)
print()
```
这里使用了一个`defaultdict`来存储无向图,`add_edge`函数用于添加边。`bfs`函数是广度优先搜索的实现,它接收一个起始点`v`和一个表示节点是否已被访问的数组`visited`。`connected_components`函数用于遍历整个图的所有连通分量,并调用`bfs`函数搜索每个连通分量。
下面是一个简单的例子,演示如何使用上述代码:
```python
g = Graph()
g.add_edge(0, 1)
g.add_edge(0, 2)
g.add_edge(1, 2)
g.add_edge(3, 4)
print("连通分量:")
g.connected_components()
```
输出结果如下:
```
连通分量:
0 1 2
3 4
```
可以看到,该代码成功地输出了无向图的两个连通分量。
阅读全文