用邻接矩阵储存带权无向图,并用这个带权无向图实现PRIM算法求最小生成树
时间: 2024-02-24 19:53:53 浏览: 100
假设带权无向图的邻接矩阵为 matrix,节点数为 n。PRIM 算法求最小生成树的代码如下:
```python
def prim(matrix):
n = len(matrix)
# 用一个列表记录已经加入已有节点集合的节点
visited = [0] * n
# 将起点加入已有节点集合中
visited[0] = 1
# 用一个列表记录各个节点到已有节点集合的最短距离
dist = matrix[0].copy()
# 用一个列表记录已经加入已有节点集合的边
edges = []
# 重复 n-1 次,每次选择一个节点加入已有节点集合,直到所有节点都被加入
for _ in range(n-1):
# 找到距离已有节点集合最近的节点,加入已有节点集合中
min_dist = float('inf')
min_index = -1
for i in range(n):
if not visited[i] and dist[i] < min_dist:
min_dist = dist[i]
min_index = i
visited[min_index] = 1
# 将已有节点集合中的边加入 edges 列表中
edges.append((min_index, dist[min_index]))
# 更新其他节点到已有节点集合的距离
for i in range(n):
if not visited[i] and dist[i] > matrix[min_index][i]:
dist[i] = matrix[min_index][i]
return edges
```
其中 edges 列表中保存的是最小生成树中的边和其权重,每个元素为 (节点编号, 权重) 的形式。
阅读全文