首页 > 解决方案 > 如何在 5 个元组中的元组列表中随机将变量质量更改为正负 delta

问题描述

我需要构建最小权重的生成树并在其中随机选择 5 条边并更改它们的权重。问题的第二部分看起来像是由元组组成的列表中的随机变化,在每个元组中,有必要将变量权重更改为正负 3

这是我的代码:

import sys

class Graph:
    def __init__(self, vertices):
        self.V = vertices
        self.graph = []
    
    def add_edge(self, u, v, w):
        self.graph.append([u,v,w])

   
    def find(self, parent, i):
        if parent[i] == i:
            return i
        return self.find(parent, parent[i])

    
    def apply_union(self, parent, rank, x, y):
        xroot = self.find(parent, x)
        yroot = self.find(parent, y)
        if rank[xroot] < rank[yroot]:
            parent[xroot] = yroot
        elif rank[xroot] > rank[yroot]:
            parent[yroot] = xroot
        else:
            parent[yroot] = xroot
            rank[xroot] +=1

    def kruskal(self):
        result = []
        i, e = 0, 0
        
        self.graph = sorted(self.graph, key=lambda item: item[2])
        parent = []
        rank = []
        
        for node in range(self.V):
            parent.append(node)
            rank.append(0)
        
        while e < self.V - 1:
            u, v, w = self.graph[i]
            i = i+1
            x = self.find(parent, u)
            y = self.find(parent, v)
            
            if x != y:
                e = e + 1
                result.append([u, v, w])
                self.apply_union(parent, rank, x, y)
        
        for u, v , weight in result:
            print("%d - %d: %d" % (u, v, weight))


if __name__=='__main__':
    g = Graph(6)
    for x,y,w in [(0,1,4),(0,2,4),(1,2,2),(1,0,4),(2,0,4),(2,1,2),(2,3,3),(2,5,2),(2,4,4),(3,2,3),(3,4,3),(4,2,4),(4,3,3),(5,2,2),(5,4,3)]:
        g.add_edge(x,y,w)
    g.kruskal()

请帮助解决问题的第二部分

标签: python-3.xlistrandomtuplesspanning-tree

解决方案


推荐阅读