Darveivoldavara

dijkstra_no_heap

Nov 17th, 2023
593
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.18 KB | None | 0 0
  1. def dijkstra_no_heap(graph, start):
  2.     n = len(graph)
  3.     distance = [float('inf')] * n
  4.     distance[start] = 0
  5.     unvisited = set(range(n))
  6.     path = [-1] * n
  7.     end = 0
  8.    
  9.     min_distance = float('inf')
  10.     min_vertex = None
  11.  
  12.     for _ in range(n):
  13.         if min_vertex is None or min_vertex not in unvisited:
  14.             min_distance = float('inf')
  15.             for v in unvisited:
  16.                 if distance[v] < min_distance:
  17.                     min_distance = distance[v]
  18.                     min_vertex = v
  19.  
  20.         if min_distance == float('inf') or min_vertex == end:
  21.             break
  22.  
  23.         unvisited.remove(min_vertex)
  24.  
  25.         for v, weight in graph[min_vertex]:
  26.             if distance[min_vertex] + weight < distance[v]:
  27.                 distance[v] = distance[min_vertex] + weight
  28.                 path[v] = min_vertex
  29.  
  30.                 if v in unvisited and distance[v] < min_distance:
  31.                     min_distance = distance[v]
  32.                     min_vertex = v
  33.  
  34.     final_path = []
  35.     current = end
  36.     while current != -1:
  37.         final_path.append(current + 1)
  38.         current = path[current]
  39.     return distance[end], final_path[::-1]
Advertisement
Add Comment
Please, Sign In to add comment