Альтернативное решение алгоритма Прима - PullRequest
0 голосов
/ 12 октября 2019

Я пытаюсь найти альтернативное связующее дерево для данного графика. Тем не менее, я не могу понять, как я могу иметь несколько решений вместе на выходе.

Для данного графика в выводе я получаю 0-2 с весом 8. Кроме того, 1-3 имеет вес 8. Поэтому я тоже хочу отдельное связующее дерево, которое имеет 1-3как часть решения, давая мне 2 отдельных решения.

import sys 
class Graph(): 

    def __init__(self, vertices): 
        self.V = vertices 
        self.graph = [[0 for column in range(vertices)]for row in range(vertices)] 

    def printTree(self, parent): 
        print ("Edge \t Weight")
        for i in range(1, self.V): 
            print (parent[i], "-", i, "\t", self.graph[i][ parent[i] ] )

    def minKey(self, key, Set): 
        min = sys.maxsize 
        for v in range(self.V): 
            if key[v] < min and Set[v] == False: 
                min = key[v] 
                min_index = v 
        return min_index 

# Prim's Algorithm 
    def prim(self): 

        key = [sys.maxsize] * self.V # Key values used to pick minimum weight edge
        parent = [None] * self.V  # Array to store constructed MST 
        key[0] = 0                # Make key 0 so that this vertex is picked as first vertex
        Set = [False] * self.V # Initially there are no vertices in MST set
        parent[0] = -1            # First node is always the root 

        for i in range(self.V):                 
            u = self.minKey(key, Set)                                            
            Set[u] = True 

            for v in range(self.V): 
                if self.graph[u][v] > 0 and Set[v] == False and key[v] > self.graph[u][v]: 
                        key[v] = self.graph[u][v] 
                        parent[v] = u 

        self.printTree(parent) 


Prim = Graph(7) 
Prim.graph = [[0, 4, 8, 0, 0, 0, 0], 
              [4, 0, 9, 8, 10,0, 0], 
              [8, 9, 0, 2, 0, 1, 0], 
              [0, 8, 2, 0, 7, 9, 0], 
              [0, 10, 0, 7, 0, 5, 6],
              [0, 0, 1, 9, 5, 0, 2],
              [0, 0, 0, 0, 6, 2, 0]]
Prim.prim()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...