私は無向グラフG = (V, E)
、頂点s
をV
に、関数w:E->{0,1}
を与えました。 v
がV
にあるとすれば、O(|V| + |E|)
時間にs
からv
までの最小重量を持つパスの重み(パスの重み=パスのエッジのワイトの和)を返す必要があります。
。
これは宿題のように聞こえるかもしれません。私は解決するのが面倒すぎます(私は時々これらの回答を得ています)。しかし、私はこの問題を解決するために本当に努力してきました。私のために持っているかもしれない。関数を与えられた最小重みのパスを見つける
0
A
答えて
0
この問題は、BFS algoのアナログでは解決できますが、キューの代わりにdeque(D)が使用されています。 Algoは各頂点に対してフラグが "マークされている"というリストを使用し、falseに初期化されます。 Sの距離が表示されるので、それらを保存したり、「オンザフライ」で使用したりできます。
Dはペア(頂点、距離ラベル)を格納します。
アルゴが開始:
Dは(S、0)によって初期化されます。
距離ラベルdのD(頂点v)の各頂点を抽出します。
vに既に到達したとマークされている場合は、次の繰り返しにスキップします。
それ以外の場合は、vに達したことを示します。ここで、dはsとvの間の正しい距離です。未到達の隣接(頂点w)ごとに距離ラベル(d_w = d + dist(v、w))を更新し、distの先頭にペア(w、d_w) (v、w)= 0、そうでなければ末尾に置く。
Algoが終了します。
すべての頂点に到達するとマークするときに、すべての頂点に距離を保存することができます。未到達の頂点はすべて無限遠の距離を持っています。
作業時間はO(| V | + | E |)です。各頂点と各エッジ(接続されたコンポーネントではs)を1回だけ処理するためです。
アルゴの正確さは、sとの距離による誘導によって証明することができます。
関連する問題
- 1. 最小値を与える引数を見つける
- 2. 与えられた出力で最大値を見つける
- 3. リストの最良解で与えられた数のカウントオカレンスを見つける
- 4. 与えられた整数よりも小さい最大の興味深い数字を見つけよう
- 5. 重み付けされたグラフから2番目に小さい最小スパニングツリーを見つけるアルゴリズム
- 6. エッジ重みを掛けることによってコストが与えられたときに最小スパニングツリーを見つけるアルゴリズム
- 7. 与えられた数のノードとエッジを持つグラフを見つけるアルゴリズム
- 8. 関数を最小化する最適ベクトルを見つける
- 9. 与えられた円の角度の点の最大値を見つける
- 10. 与えられた行列のうち最大行列と最小行列を見つけよう
- 11. 与えられたパスのNetworkXマルチグラフの重みの合計を計算する
- 12. Matlabが関数の最小値/最大値を見つける
- 13. 与えられたデータの間の一致を見つける
- 14. 与えられた色の近くの色を見つける
- 15. 整数からなる与えられた配列から最大の連続したサブアレイを見つける
- 16. Java与えられた数字の正の約数を見つける方法
- 17. 単一の数字が与えられた他の数字を見つける
- 18. 与えられたXMLファイルで最大のノードを見つけるには?
- 19. 与えられた範囲の最大レコードを見つける方法
- 20. 与えられた配列内のすべてのウィンドウサイズの最小値を見つける
- 21. 与えられたサブネットのネットワークアドレスを見つける方法は?
- 22. 与えられたコードの複雑さを見つける
- 23. 与えられたコミットのタグ情報を見つける
- 24. 与えられた日付の曜日を見つける
- 25. 与えられた式の上限を見つけるには
- 26. 与えられたリストのanagramsを見つける方法
- 27. Gnuplot:与えられたx値のy値を見つける
- 28. 与えられたテーブルの子テーブルを見つける方法
- 29. 与えられたAVLツリーに提示されない最小要素を見つけること
- 30. Re:バイナリ検索ツリーと数字が与えられていると、ノードのデータが与えられた番号に追加されたパスを見つける
M. Thorupによる線形アルゴリズムがありますが、(有料ではない)説明を見つけることができません... – fjardon