Prime算法

来源:互联网 发布:西装面料 知乎 编辑:程序博客网 时间:2024/05/18 01:40

最小代价生成树

实现中树采用邻接矩阵的存储方式,用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 vlistif __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)