ホームページ >バックエンド開発 >C++ >重みが 1 以上のエッジを含む最小プロダクト パス

重みが 1 以上のエッジを含む最小プロダクト パス

王林
王林転載
2023-08-30 11:37:061458ブラウズ

重みが 1 以上のエッジを含む最小プロダクト パス

重みが 1 以上の最小エッジを持つパスを見つけるには、ダイクストラのアルゴリズムを少し変更して使用できます。まず、ソース ノードの重みを 1 に設定し、他のノードの重みを無限大に設定します。アルゴリズムの実行中、距離は更新されず、重みの積が更新されます。これにより、重みが最小のパスが確実に選択されます。各ステップで最小の重みを持つノードを選択することで、ターゲット ノードに到達するまでの最短パスを繰り返し発見します。最終的に、このパスに沿った重みの積は最小となり、指定された条件を満たします。

使用説明書

  • 加重積を使用してダイクストラのアルゴリズムを修正しました

  • 重み付け積を使用した変更された Bellman-Ford アルゴリズム

加重積のダイクストラ アルゴリズムの改善

修正されたダイクストラ アルゴリズムでは、最初にソース ノードの重みを無限大に設定し、他のすべてのノードの重みを無限大に設定します。計算を実行する際、すべての重みで距離を更新するのではなく、これまでに発生した重みの積で距離を更新します。各ステップで、最小の重みを持つノードを選択し、同じ方法で隣接するノードの重みを更新します。このプロセスは、ターゲット ノードに到達するまで継続されます。最終的に、このパスに沿った重みの積は可能な最小値を表し、重みが 1 以上であるという条件を満たします。

###アルゴリズム###

    ウェイトが 0 に設定されているソース中心を除く、すべての中心ウェイトを無限大に初期化します。
  • 削除されたノードを追跡するクリーンアップ コレクションを作成します。
  • 未訪問のノードがある場合、
    • 未訪問のノードの中で最小の重みを持つ中心を選択します。
    • 選択したセンターを訪問済みとしてマークします。
    • 未訪問の隣接ハブごと:
    • 現在の中央ノードの重みとそれに接続されているエッジの重みを計算します。
    • 計算された項が隣接する中心の重みより小さい場合、その重みを計算された積で置き換えます。
  • ターゲットセンターが消えるか、すべてのセンターを訪問するまでステップ 3 を繰り返します。
  • ターゲット中心重量は、ソースからターゲット ポイントまでの途中での最小アイテム重量を反映します。
  • ###例### リーリー ###出力### リーリー
  • 重み付け積を使用した変更された Bellman-Ford アルゴリズム

重み付けされたオブジェクトを使用した調整済みの Bellman-Ford アルゴリズムでは、ソース中心の荷重を 1 に設定し、他のすべての中心の荷重を無限大に設定することから始めます。各ループでは、現在のノードの重みと、ノードをターゲットの中心に接続するエッジの荷重とを比較することによって、すべてのエッジが解明されます。計算された重量がターゲットセンターの荷重より小さい場合、計算された重量だけターゲットセンターの重量を増加させます。このプロセスを V-1 回繰り返します。ここで、V は中心の総数であり、すべての可能なパスが確実に考慮されます。ターゲット中心の重みは、ソースからターゲットまでのパス上の最小の重みを表します。

###アルゴリズム###

ソース中心を除き、他のすべての中心の重みは無限である必要があります。

上記の手順を V-1 回繰り返します。ここで、V はノードの総数です:

  • グラフの各エッジについて、現在の中心にあるアイテムの重みと、それらに接続されているエッジの重みを計算します。
  • 計算されたアイテムがターゲットセンターの重量より小さい場合、その重量は計算された製品でアップグレードされます。
    • V-1 期間の後、すべての中央ノードの重みが決定されます。
    • 計算中に、グラフ内に負の重みサイクルがある場合、追加のサイクルが識別されます。このプロセス中に重みが修正された場合、これは負の重みサイクルが存在することを示します。
  • ターゲット中心重量は、ソースからターゲット ポイントまでの途中での最小アイテム重量を反映します。

  • グリーディ シェーディング アルゴリズムは、利用可能な色と隣接する頂点で使用されている色に基づいて、貪欲な方法で頂点に色を割り当てます。グラフのシェーディングを実現するために常に最小数の色を使用するとは限りませんが、頂点シェーディングの高速かつ効率的な方法を提供します。

  • ###例### リーリー ###出力### リーリー ###結論は###

    この記事では、重みが 1 以上の最小エッジを持つパスを見つける方法を説明します。この問題を解決するために、改良されたダイクストラ アルゴリズムと改良されたベルマン フォード アルゴリズムという 2 つのアルゴリズムが導入されています。修正されたダイクストラ アルゴリズムは各ステップで最小の重みを持つノードを選択しますが、修正されたベルマン フォード アルゴリズムは反復的にエッジをアンラップして重みを更新します。この記事では、これら 2 つのアルゴリズムを C 言語で実装し、テスト入力での使用法を説明します。出力は、送信元ノードから宛先ノードまでのパス上の最小重みです。

以上が重みが 1 以上のエッジを含む最小プロダクト パスの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はtutorialspoint.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。