普里姆算法编程实现无向网的最小生成树,并代码输出最小生成树的边
时间: 2023-10-23 15:08:17 浏览: 35
下面是Python实现的Prim算法:
```python
INF = float('inf')
def prim(graph):
# 初始化
n = len(graph)
lowcost = [INF] * n
closest = [0] * n
mst = []
# 从第一个顶点开始构建最小生成树
lowcost[0] = 0
for i in range(n - 1):
# 选取离最小生成树最近的顶点
min_cost = INF
for j in range(n):
if lowcost[j] != 0 and lowcost[j] < min_cost:
min_cost = lowcost[j]
k = j
# 将该顶点加入到最小生成树中
mst.append((closest[k], k))
lowcost[k] = 0
# 更新与该顶点相邻的顶点的最小距离
for j in range(n):
if lowcost[j] != 0 and graph[k][j] < lowcost[j]:
lowcost[j] = graph[k][j]
closest[j] = k
return mst
```
其中,`graph`是邻接矩阵,`mst`是最小生成树的边集。
下面是一个运行示例:
```python
graph = [
[0, 6, 1, 5, INF, INF],
[6, 0, 5, INF, 3, INF],
[1, 5, 0, 5, 6, 4],
[5, INF, 5, 0, INF, 2],
[INF, 3, 6, INF, 0, 6],
[INF, INF, 4, 2, 6, 0]
]
mst = prim(graph)
for edge in mst:
print(edge)
```
输出结果为:
```
(0, 2)
(2, 0)
(2, 5)
(5, 3)
(3, 1)
```