用python中类和对象知识编写编写程序:利用广度优先搜索编程实现确定无向图的连通分量
时间: 2024-03-24 10:37:17 浏览: 59
好的,我可以为您编写这个程序。
下面是使用 Python 实现广度优先搜索(BFS)来确定无向图的连通分量的示例代码:
```python
from collections import defaultdict, deque
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 = deque([v])
visited.add(v)
while queue:
vertex = queue.popleft()
for neighbor in self.graph[vertex]:
if neighbor not in visited:
visited.add(neighbor)
queue.append(neighbor)
def connected_components(self):
visited = set()
components = []
for vertex in self.graph:
if vertex not in visited:
component = set()
self.bfs(vertex, component)
components.append(component)
visited |= component
return components
```
这个程序首先定义了一个 `Graph` 类,它包含了一个空的默认字典 `graph` 和方法 `add_edge`,用于向图中添加边。
然后,它定义了一个 `bfs` 方法,该方法使用广度优先搜索遍历图,并将遍历的节点添加到 `visited` 集合中。
最后,它定义了一个 `connected_components` 方法,该方法使用 BFS 找到所有的连通分量,并将它们存储在一个列表中返回。
您可以使用以下代码来测试该程序:
```python
# 创建一个空的无向图
g = Graph()
# 添加边
g.add_edge(1, 2)
g.add_edge(2, 3)
g.add_edge(4, 5)
g.add_edge(5, 6)
# 打印连通分量
print(g.connected_components())
```
输出结果应该是:`[{1, 2, 3}, {4, 5, 6}]`,表示这个无向图有两个连通分量。
阅读全文