コンテンツにスキップ

Mindist

単一始点最短経路を計算する.

Warning

動作検証が不十分であるため,バクを含んでいる可能性が高いです.

メンバ関数

コンストラクタ

mindist_graph::mindist_graph<Cost>(int n);

頂点数 n ,辺集合が空のグラフを生成する.

追加

int mindist_graph::add_edge(int from, int to, Cost cost, bool bidirected = true);

頂点 from から頂点 to へコスト cost の辺を追加する. 有向辺を追加するときは bidirected = false とする.

最短経路の計算

std::vector<Cost> mindist_graph::dist(int s);

始点を s としたときの,各頂点までの最短距離を計算する. 戻り値の型は std::vector<Cost> であり,i 番目の要素は頂点 s から頂点 i への最短経路である(ただし,頂点 s から頂点 i へのパスが存在しない場合,std::numeric_limits<Cost>::max() が格納されている). 辺の本数を \(m\) とすると,すべての辺のコストが非負のとき,計算量は \(O((n + m)\log m)\) となる. そうではなく,ある辺が負のコストを持つとき,計算量は \(O(nm)\) となる.