prim算法
时间: 2023-07-10 18:19:26 浏览: 83
好的,以下是一个基本的Prim算法的示例代码,您可以参考一下:
```python
import heapq
def prim(graph, start):
visited = set() # 记录已经访问的节点
min_heap = [(0, start)] # 优先队列,存储当前生成树与未加入生成树的节点之间的边,第一个元素为边权,第二个元素为节点
min_spanning_tree = [] # 存储最小生成树的边
while min_heap:
weight, node = heapq.heappop(min_heap) # 取出最小边权的节点
if node not in visited:
visited.add(node)
min_spanning_tree.append((weight, node))
for neighbor, neighbor_weight in graph[node].items():
if neighbor not in visited:
heapq.heappush(min_heap, (neighbor_weight, neighbor)) # 将相邻节点加入优先队列
return min_spanning_tree
```
其中,graph是一个字典,存储节点之间的连边关系和边权信息,start是起点节点。例如:
```python
graph = {
'A': {'B': 5, 'C': 1},
'B': {'A': 5, 'C': 2, 'D': 1},
'C': {'A': 1, 'B': 2, 'D': 4},
'D': {'B': 1, 'C': 4}
}
start = 'A'
```
这段代码可以求出以起点A为根节点的最小生成树。
阅读全文