帮我写一段最小生成树的代码
时间: 2023-07-22 12:59:33 浏览: 80
当然可以!以下是一个基于 Prim 算法的最小生成树(Minimum Spanning Tree)的代码示例:
```python
from collections import defaultdict
def prim(graph):
# 存储最小生成树的边
mst = []
# 存储顶点是否已经被访问的状态
visited = defaultdict(bool)
# 选择一个起始顶点
start_vertex = list(graph.keys())[0]
visited[start_vertex] = True
while len(mst) < len(graph) - 1:
min_weight = float('inf')
min_edge = None
# 遍历已访问的顶点,寻找权值最小的边
for vertex in graph:
if visited[vertex]:
for neighbor, weight in graph[vertex]:
if not visited[neighbor] and weight < min_weight:
min_weight = weight
min_edge = (vertex, neighbor)
# 将找到的最小边加入最小生成树,标记顶点为已访问
if min_edge:
mst.append(min_edge)
visited[min_edge[1]] = True
return mst
# 测试
graph = {
'A': [('B', 2), ('C', 3)],
'B': [('A', 2), ('C', 4), ('D', 3)],
'C': [('A', 3), ('B', 4), ('D', 5)],
'D': [('B', 3), ('C', 5)]
}
minimum_spanning_tree = prim(graph)
for edge in minimum_spanning_tree:
print(edge)
```
这段代码使用了图的邻接表来表示图,`graph` 是一个字典,键表示顶点,值是一个列表,每个元素是一个二元组,表示与该顶点相邻的顶点及其边的权值。`prim()` 函数使用 Prim 算法来生成最小生成树,并返回最小生成树的边。
请注意,这只是一个示例代码,你可以根据自己的需求进行修改和扩展。希望对你有帮助!
阅读全文
相关推荐
![zip](https://img-home.csdnimg.cn/images/20241231045053.png)
![pdf](https://img-home.csdnimg.cn/images/20241231044930.png)
![zip](https://img-home.csdnimg.cn/images/20241231045053.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)