# T:最短路徑樹
# 尋找圖形 g 中由起點 s 出發的最短路徑
dijkstra(g, s):
    for v ←0 to g.N-1:
        dist[v] ← INF
        parent[v] ← NIL # 無父節點的狀態

    d[s] ← 0

    while True:
        u ← NIL
        minv ← INF
        # find minimum
        for v ← 0 to g.N-1:
            if v 已在 T 內 : continue
            if dist[v] < minv:
                u ← v
                minv ← dist[v]
 
        if u = NIL: break
        將 u 新增至 T 內
  
        for v ← 0 to g.N-1:
            if weight[u][v] = INF: continue:
            if v 已在 T 內: continue
            if dist[v] > dist[u] + weight[u][v]:
                dist[v] ← dist[u] + weight[u][v]
                parent[v] ← u