编写一段prime算求最小生成树的代码
时间: 2024-04-21 10:17:24 浏览: 81
以下是使用Prime算法求最小生成树的Python代码:
```python
import heapq
def prim(graph):
"""使用Prime算法求最小生成树"""
start_node = list(graph.keys())[0] # 从第一个节点开始遍历
visited = set([start_node]) # 已访问的节点集合
min_heap = [(weight, start_node, dest) for dest, weight in graph[start_node].items()]
heapq.heapify(min_heap) # 将边按权重加入最小堆
mst = [] # 最小生成树的边集合
while min_heap:
weight, src, dest = heapq.heappop(min_heap)
if dest not in visited: # 如果目标节点没有访问过
visited.add(dest)
mst.append((src, dest, weight))
for new_dest, new_weight in graph[dest].items(): # 将目标节点的所有边加入最小堆
if new_dest not in visited:
heapq.heappush(min_heap, (new_weight, dest, new_dest))
return mst
```
其中,输入的`graph`参数是一个字典,表示图的邻接表。字典的键是节点,值是一个字典,表示该节点和相邻节点的边的权重。例如,以下代码定义了一个简单的无向图:
```python
graph = {
'A': {'B': 2, 'C': 3},
'B': {'A': 2, 'C': 1},
'C': {'A': 3, 'B': 1, 'D': 4},
'D': {'C': 4},
}
```
使用`prim(graph)`函数即可求出该图的最小生成树。
阅读全文