用python使用prim算法写出最小生成树的代码
时间: 2023-06-18 17:05:06 浏览: 117
Prim算法是一种常用的最小生成树算法,其基本思想是从一个顶点开始,逐步加入距离该顶点最近的未加入树中的顶点,直到所有顶点都被加入为止。下面是用Python实现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("Edge \tWeight")
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()
```
上述代码实现了Prim算法的主要功能,包括了最小生成树的生成和输出。其中,Graph类代表了一个图,其中包含V个顶点,graph是一个V×V的邻接矩阵,表示了图中各个顶点之间的边。primMST()函数是Prim算法的主要实现函数,通过调用minKey()函数找到距离该顶点最近的未加入树中的顶点,并将其加入树中。最终,通过调用printMST()函数输出最小生成树的边和权重。
阅读全文