Prime算法

最小代價生成樹

實現中樹採用鄰接矩陣的存儲方式,用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)


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章