2012-05-04 8 views
2

私が作成したシンプルなネットワーク負荷シミュレーションツールを書き直そうとしています。今度はBoostライブラリを使用してパフォーマンスを改善しています(実装ミスを避けるため)。元のプログラムでは、ネットワーク上のすべてのソースノードからDijkstraのアルゴリズムを呼び出すことで最短経路を計算したので、Johnsonのもののような全ペアアルゴリズムがあることがわかったときに喜んでいました(私のグラフは比較的疎です、 私が想定し)。しかし、このアルゴリズムは距離行列を返すだけですが、私は実際の経路を必要としています - 少なくとも、Dijkstraのアルゴリズム実装が返す前のマップのようなものです。それを達成する方法はありますか、またはグラフの各頂点についてDijkstraを繰り返し呼び出すように戻す必要はありますか?私は一日中見渡してきましたが、何も見つかりませんでした。繰り返しアプローチに戻る前に確かめたいと思っていました。実際にルートを保存するすべてのペアの最短パスアルゴリズム?

ありがとうございます!

答えて

0

これは古い質問ですが、私もこれに対する回答を探していましたが、以前の回答が少し曖昧であることがわかりました。

距離行列があり、頂点iから頂点jまでの最短経路を探したいとします。頂点iは一連の可能な後続Nを有する。私の後継を最小限にNで頂点である:

C(I、n)はiと隣接間のエッジのコストであり、N、およびd(N、j)が最短である
c(i,n) + d(n,j) 

距離行列によって与えられるnとjの間の距離。上の方程式を最小にする隣人nを選び、プロセスを繰り返し、iをnとNをnの近傍に置き換えます。

0

各(i、j)ペアごとに単一の最短パスがあると仮定すると、ノードwのポテンシャルが次式の可能性に等しい場合、wの前任者を仮定して簡単にパスを再構成できます。ノードuにコストまたはuwエッジを加えたもの。

+0

こんにちは、返信ありがとうございます。残念ながら、同じ長さの複数の最短パスが存在しないことを保証することはできません。私は単純にすべてのソースに対してダイクストラアルゴリズムを反復し、それを使って完了することに決めました。 – manuhalo

+0

最短パスが複数ある場合でも、最短パスを1つ見つけるのは簡単です。 – baol

関連する問題