2016-07-13 4 views
0

私は重み付けグラフを持っています。 ノードSからノードEまでの最適なパスを見つけたいので、そのパス内にあった最大単一エッジの重みが可能な限り小さくなります。例えばグラフの最小ウェイトパス

:このグラフの

S -> E (w=40) 
S -> A (w=30) 
A -> E (w=20) 

、djikstraは、コストと(S->コスト40とE私が代わりに欲しい、であるS-> A-> Eであることを最短経路を計算しますmax(30,20)= 30)。

ダイクストラをこのように変更することはできますか? これを実現する既知のアルゴリズムはありますか?

+0

これは、総コストを考慮せずに次にコストの低いエッジを選択する貪欲なアプローチを使用することで解決できます。 – Wajahat

答えて

1

この問題を解決する方法は、プライオリティキュー/ヒープからの距離(比較値)を保存する方法を変更することですが、それ以外の場合、構造はDijkstra'sに似ています。あなたは全体の距離ではなく、構築されたパスにこれまでの最大の重みを格納します。この方法では、優先順位のキューでは、最小のものを優先して順番に実行します。

したがって、あなたが与えた例では、それは30のawともう1つの40のためにS - > Aで始まります。2番目の実行では、A = EはMath.max(20,30)が< 40であるため、優先キュー/ヒープに先に格納されるためです。

宛先に到達すると、そのパスが最も少なくなることが保証されます。これが理にかなってほしい!

1)すべてのエッジを削除し、ソート最初の分とエッジ:

+1

私はdijkstraをあなたと同じように再実装することができました^^。より良いアイデアが現れなければ私はこれを受け入れるつもりだ;) – Lake

+0

助けてくれてうれしいよ。 – MathBunny

0

あなたは貪欲アルゴリズムのバリアントを使用することができます。

2)ソースノードからターゲットノードへのパスがあるまで、最小から最大の順にグラフにエッジを追加します。そのパスはあなたが探しているパスです。

+0

複数のパスが一度に利用できるようになるとどうなる?私はまだどちらが最善であるかを考慮する必要があります。これは私をよりダイクストラ様のソリューションに導きます! – Lake

関連する問題