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)\) となる.