直感に反して、これは宿題ではないと仮定します。トポロジー順序付けによって得られる情報を活用する必要があります。ノード n をトポロジー順序で調べるときはいつでも、n へのすべての可能なパスを既に通過したことが保証されます。これを使用すると、トポロジカル順序 (疑似コード) の 1 回の線形スキャンで最短パスを生成できることが明らかです。
Graph g
Source s
top_sorted_list = top_sort(g)
cost = {} // A mapping between a node, the cost of its shortest path, and
//its parent in the shortest path
for each vertex v in top_sorted_list:
cost[vertex].cost = inf
cost[vertex].parent = None
cost[s] = 0
for each vertex v in top_sorted_list:
for each edge e in adjacensies of v:
if cost[e.dest].cost > cost[v].cost + e.weight:
cost[e.dest].cost = cost[v].cost + e.weight
e.dest.parent = v
これで、s から目的地までの最短経路を調べることができます。コスト マッピングで宛先を検索し、その親を取得し、親が s であるノードが取得されるまでこのプロセスを繰り返すだけで、最短パスが得られます。