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)
Get help from others!
Recent Answers
Recent Questions
© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP