最小全域木問題について(プリム法)

class MinimumSpanningTree(object):
    def __init__(self, v):
        self.v = v
        self.e = 0
        self.mincost = [float("inf") for i in range(v)]
        self.cost = [[float("inf") for i in range(v)] for i in range(v)]
        self.used = [0 for  i in range(v)]

    def append(self, _from, _to, _cost):
        self.cost[_from][_to] = _cost
        self.e += 1

    def prim(self):
        res = 0
        self.mincost = [float("inf") for i in range(v)]
        self.used = [0 for  i in range(v)]

        self.mincost[0] = 0

        while 1:
            v = -1
            for u in range(self.v):
                if not self.used[u] and (v == -1 or self.mincost[u] < self.mincost[v]):
                    v = u

            if v == -1:
                break

            self.used[v] = 1
            res += self.mincost[v]

            for u in range(self.v):
                self.mincost[u] = min(self.mincost[u], self.cost[v][u])

        return res

    def append_test(self):
        self.append(0, 2, 1)
        self.append(1, 2, 2)
        self.append(1, 4, 10)
        self.append(2, 0, 1)
        self.append(2, 1, 2)
        self.append(2, 3, 3)
        self.append(2, 5, 7)
        self.append(3, 2, 3)
        self.append(3, 5, 1)
        self.append(3, 6, 5)
        self.append(4, 1, 10)
        self.append(4, 5, 5)
        self.append(5, 2, 7)
        self.append(5, 3, 1)
        self.append(5, 4, 4)
        self.append(5, 6, 8)
        self.append(6, 3, 5)
        self.append(6, 5, 8)