# T: 最短経路木
# グラフgと始点s
dijkstra(g, s):
    PriorityQueue que     #(暫定距離, ノード番号)を要素とした優先度付きキュー

    for v ← 0 to g.N-1:
        dist[v] ← INF

    dist[s] ← 0
    queに(0, s)を挿入する

    while queが空ではない:
        cost, u ← que.extractMin() # 得られた組の要素をそれぞれcost, uに代入

        if dist[u] < cost: continue

        Tにuを含める
  
        for e in g.adjLists[u]:
            if e.v がTに含まれる: continue
            if dist[e.v] > dist[u] + e.weight
                dist[e.v] ← dist[u] + e.weight
                queに(dist[e.v], e.v)を挿入する
                parent[e.v] ← u