ワーシャルフロイド法 (Warshall-Floyd Algorithm)

概要

全点対最短経路問題(APSP)を解くアルゴリズム。

グラフ \(G = (V, E)\) の全てのペア \((v, w)\) 間の最短経路コストを求める。

計算量

\(O(|V|^3)\)

実装

# N: 頂点数
# cost[i][j]: 頂点 v_i から頂点 v_j へ到達するための辺コストの和
N = ...
cost = [[...] for i in range(N)]

INF = 10**18
for k in range(N):
    for i in range(N):
        for j in range(N):
            if cost[i][k] != INF and cost[k][j] != INF:
                cost[i][j] = min(cost[i][j], cost[i][k] + cost[k][j])

Verified

  • AOJ: "GRL_1_C: Shortest Path - All Pairs Shortest Path": source (Python2, 0.67sec)


戻る