低调咖啡 發表於 2019-6-11 16:15:00

Python实现Dijkstra算法

<pre><code># Dijkstra.狄杰斯特拉
import heapq
import math

def init_distance(graph, s):
    distance = {s: 0}
    for vertex in graph:
      if vertex != s:
            distance = math.inf
    return distance


def dijkstra(graph, s):
    pqueue = []
    heapq.heappush(pqueue, (0, s))
    seen = set()
    parent = {s: None}
    distance = init_distance(graph, s)

    while len(pqueue) &gt; 0:
      pair = heapq.heappop(pqueue)
      dist = pair
      vertex = pair
      seen.add(s)
      nodes = graph.keys()
      for w in nodes:
            if w not in seen:
                if dist + graph &lt; distance:
                  heapq.heappush(pqueue, (dist + graph, w))
                  parent = vertex
                  distance = dist + graph
    return parent, distance


if __name__ == '__main__':
    graph_dict = {
      "A": {"B": 5, "C": 1},
      "B": {"A": 5, "C": 2, "D": 1},
      "C": {"A": 1, "B": 2, "D": 4, "E": 8},
      "D": {"B": 1, "C": 4, "E": 3, "F": 6},
      "E": {"C": 8, "D": 3},
      "F": {"D": 6},
    }

    parent_dict, distance_dict = dijkstra(graph_dict, "A")
    print(parent_dict)
    print(distance_dict)

</code></pre><br><br>
来源:https://www.cnblogs.com/c-x-a/p/11004242.html
頁: [1]
查看完整版本: Python实现Dijkstra算法