实现代码:最小生成树问题 若在n个城市中建立通信网络,如何找到所需要的代价最小的n-1条线路?这是通信网的最小生成树问题。 要求: (1)以邻接矩阵存储一个无向网。 (2)应用算法求最小生成树 (3)输出最小生成树。
时间: 2023-07-22 18:23:22 浏览: 101
以下是基于Prim算法的最小生成树实现代码,使用邻接矩阵存储无向网:
```python
import sys
class Graph:
def __init__(self, vertices):
self.V = vertices
self.graph = [[0 for column in range(vertices)] for row in range(vertices)]
def printMST(self, parent):
print("边\t权值")
for i in range(1, self.V):
print(parent[i], "-", i, "\t", self.graph[i][parent[i]])
def minKey(self, key, mstSet):
min = sys.maxsize
for v in range(self.V):
if key[v] < min and mstSet[v] == False:
min = key[v]
min_index = v
return min_index
def primMST(self):
key = [sys.maxsize] * self.V
parent = [None] * self.V
key[0] = 0
mstSet = [False] * self.V
parent[0] = -1
for cout in range(self.V):
u = self.minKey(key, mstSet)
mstSet[u] = True
for v in range(self.V):
if self.graph[u][v] > 0 and mstSet[v] == False and key[v] > self.graph[u][v]:
key[v] = self.graph[u][v]
parent[v] = u
self.printMST(parent)
g = Graph(5)
g.graph = [
[0, 2, 0, 6, 0],
[2, 0, 3, 8, 5],
[0, 3, 0, 0, 7],
[6, 8, 0, 0, 9],
[0, 5, 7, 9, 0]
]
g.primMST()
```
输出结果为:
```
边 权值
0 - 1 2
1 - 2 3
0 - 3 6
1 - 4 5
```
阅读全文