最小代价生成树
实现中树采用邻接矩阵的存储方式,用python来实现
基本思想:在图中选取一些定点构成树,选取与这颗树相连变最短的那条边所连的定点加入树中。
class MGraph:
def __init__(self,n, values):
self.n = 5
self.edge = [[ 10 for i in range(5)] for i in range(5)]
edgelist = []
for i in range(self.n):
for j in range(self.n):
edgelist.append([i,j])
for i, j in zip(edgelist, values):
self.edge[i[0]][i[1]] = j
def show(self):
print(self.edge)
def prime(self, v0):
lowcost = [10 for i in range(self.n)]
vset = [0]*self.n
vlist = [0]*self.n
vset[v0] = 1
sum = 0
for i in range(self.n):
lowcost[i] = self.edge[v0][i]
k = 0
for i in range(self.n):
t_min = 10
for j in range(self.n):
if(vset[j] == 0 and lowcost[j] < t_min):
t_min = lowcost[j]
k = j
v = k
if(vset[v] == 0):
sum += t_min
vset[v] = 1
for j in range(self.n):
if(vset[j] == 0 and self.edge[v][j] < lowcost[j]):
lowcost[j] = g.edge[v][j]
vlist [j] = v
return vlist
if __name__ == '__main__':
#edgelist = [[0, 0], [0, 1], [0, 4], [1, 1], [2, 2], [2, 3], [2, 5], [3, 0], [3, 1], [3, 3], [3, 4], [4, 4], [4, 5],
# [5, 5]]
#values = [0, 1.1, 8.0, 0, 0, 5.7, 5.0, 2.2, 3.2, 0, 3.3, 0, 6.0, 0]
values = [0,5,1,2,10,5,0,3,10,4,1,3,0,6,2,2,10,6,0,3,10,4,2,3,0]
g = MGraph(5, values)
g.show()
vlist = g.prime(0)
print(vlist)