TransWikia.com

Pregunta sobre el siguiente algoritmo de Dijkstra en Python

Stack Overflow en español Asked by Estudiante on February 3, 2021

Me surgió la duda de como modificar el código que se presenta más abajo para que solo muestre la ruta posible desde un nodo inicio y un nodo termino, en vez de que me compare las todas las rutas con un nodo inicio y todos los posibles nodos términos. Se trata del algoritmo de Dijkstra para el problema de la ruta más corta dada una matriz de adyacencia.

Sería de mucha ayuda si alguien me puede ayudar ya que es un problema que me ha tomado harto tiempo poder averiguar como resolver.

class Graph:

def minDistance(self, dist, queue):
    minimum = float("Inf")
    min_index = -1

    for i in range(len(dist)):
        if dist[i] < minimum and i in queue:
            minimum = dist[i]
            min_index = i
    return min_index

def printPath(self, parent, j):

    # Base Case : If j is source
    if parent[j] == -1:
        print (j),
        return
    self.printPath(parent, parent[j])
    print (j),

def printSolution(self, dist, parent):
    src = 0
    print("Vertex ttDistance from SourcetPath")
    for i in range(1, len(dist)):
        print("n%d --> %d tt%d ttttt" % (src, i, dist[i])),
        self.printPath(parent, i)

def dijkstra(self, graph, src):

    row = len(graph)
    col = len(graph[0])

    dist = [float("Inf")] * row

    parent = [-1] * row

    dist[src] = 0

    queue = []
    for i in range(row):
        queue.append(i)

    while queue:
        u = self.minDistance(dist, queue)
        queue.remove(u)
        for i in range(col):
            if graph[u][i] and i in queue:
                if dist[u] + graph[u][i] < dist[i]:
                    dist[i] = dist[u] + graph[u][i]
                    parent[i] = u


    self.printSolution(dist, parent)

g = Graph()

g = Graph()

graph = [[0, 4, 0, 0, 0, 0, 0, 8, 0],
     [4, 0, 8, 0, 0, 0, 0, 11, 0],
     [0, 8, 0, 7, 0, 4, 0, 0, 2],
     [0, 0, 7, 0, 9, 14, 0, 0, 0],
     [0, 0, 0, 9, 0, 10, 0, 0, 0],
     [0, 0, 4, 14, 10, 0, 2, 0, 0],
     [0, 0, 0, 0, 0, 2, 0, 1, 6],
     [8, 11, 0, 0, 0, 0, 1, 0, 7],
     [0, 0, 2, 0, 0, 0, 6, 7, 0]]

g.dijkstra(graph, 0)

Cuyo resultado que arroja es algo así

Add your own answers!

Ask a Question

Get help from others!

© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP