ホームページ  >  記事  >  バックエンド開発  >  指定されたグラフ内の 2 つのノード間のパスが最短パスを表すかどうかを確認します

指定されたグラフ内の 2 つのノード間のパスが最短パスを表すかどうかを確認します

王林
王林転載
2023-09-07 18:57:05556ブラウズ

指定されたグラフ内の 2 つのノード間のパスが最短パスを表すかどうかを確認します

グラフの 2 つの中心間の指定されたパスが最短パスに準拠しているかどうかを確認するには、信頼できる最短パスを使用して、同じ中心を持つ指定されたパスに沿ったエッジの重み全体を結合できます。パス間の最短距離は、ダイクストラ計算やフロイド・ウォーシャル計算などの比較手法を使用して計算されます。特定のパス上のすべてのエッジの重みが最も制限された削除に一致する場合、それは最も単純なパスを表します。また、エッジの重み全体が最短距離よりも目立つ場合は、グラフ内の 2 つの中心間の距離が短いことを示します。

使用説明書

  • ダイクストラのアルゴリズム

  • 限界反転コストを伴うFloyd-Warshallアルゴリズム

貪欲なアルゴリズム

ダイクストラの計算は、おそらくグラフ内のソース中心と他のすべての中心の間の最も限定されたパスを見つけるために使用される一般的なグラフ走査計算です。 2 つの中心間の特定の経路が最も有限な経路に関連しているかどうかを確認する場合、ダイクストラの計算を使用してこれらの中心間の最も有限な分離を計算できます。開始ハブからダイクストラの計算を実行することにより、他のすべてのハブの最も有限な間隔が得られます。特定のルートが 2 つのハブ間の最も制限された距離に一致する場合、それは実質的で最短のルートを表します。その他: 指定されたルートが計算された最短距離より長い場合は、より短いルートがチャート内に存在することを示します。

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

    最短パス (グラフ、ソース、宛先) を作成します:
  • 「過去」のセットを初期化して中心までの距離を保存し、単語参照間隔を初期化して最も限定された距離を保存します。
  • セパレータ ディクショナリでソース ハブの間隔を無限大に設定し、他のすべてのハブの間隔を無限大に設定します。
  • 未訪問のノードがありますが、
  • a.区切り文字参照からの距離が最も小さい中心が選択され、訪問済みとしてマークされます。
  • b.現在のノードの各隣接ハブ:
  • 一時的な間隔は、現在のノードの距離にエッジの重みを加算することによって計算されます。
  • 条件間隔が保管間隔より小さい場合は、検査距離。
  • 分離におけるソースからデスティネーションまでの最短距離が指定されたパス長と一致する場合 (指定されたパスが最短パスを表す) に true を返します。それ以外の場合は false を返します。
  • この計算では、ダイクストラ法を利用して最短間隔を計算し、送信元から宛先までの最短距離と指定されたパス長を比較して、それが最短パスであるかどうかを判断します。
  • ###例### リーリー ###出力### リーリー
  • 限界反転コストを伴うFloyd-Warshallアルゴリズム
フロイド-ウォーシャル計算は、グラフ内のすべての中心ペア間の最短経路を見つける、動的にプログラムされた計算です。 2 つの中心間の特定のパスが最も限定されたパスに関連しているかどうかを確認する場合、フロイド・ウォーシャル計算を使用して、グラフ内のすべての中心セット間の最短距離を計算できます。計算された最短距離を特定のパス上のすべてのエッジの重みと比較することで、特定のパスに最も制限されたパスが含まれているかどうかを判断できます。全体のエッジの重みが最短距離と一致する場合、この時点で指定されたパスは、おそらくグラフ内の 2 つの中心間の最も限定されたパスになります。

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

numNodes x numNodes を測定する 2D ラティスを作成し、すべてのノード セットに対して無限 (INF) に初期化します。

dist の隅から隅までの加算を 0 に設定します。

  • グラフ内の重み w を持つ各座標エッジ (u, v) について、dist[u][v] を w に完全に変更し、dist[v][u] を w w_reversal に変更します。ここで、w_reversal が取得されます。エッジ (v、u) を反転します。

  • 固定ループの後にフロイド・ウォーシャル計算を実行します:

  • numNodes から 1 までの中間ハブごとに、次の操作を実行します。

  • numNodes から 1 までのハブ i と j の集合ごとに、dist[i][j] を次の値の最小値に調整します。

  • 距離[i][j]
  • 距離[i][k]距離[k][j]
  • 計算が完了すると、エッジ反転コストを考慮して、すべてのハブ グループ間の最も制限された分離が dist に含まれます。
  • 2 つのハブ (送信元と宛先) 間の指定されたルートが最短ルートかどうかを確認するには、指定されたルートの長さと距離 [送信元][宛先] を比較します。そうであれば、指定された方法が最も限定された方法になります。
  • ###例### リーリー ###出力### リーリー ###結論は###
  • この記事では、グラフの 2 つの中心間の特定のパスが最も有限なパスを表すかどうかを確認する方法について説明します。これは、エッジ反転を取得するための 2 つの方法、ダイクストラ計算とフロイド-ウォーシャル計算を示しています。 C でのコードの使用法は、これらの計算を示しています。計算とその使い方についても簡単に説明します。この記事は、図内で最も限定されたメソッドを見つけて、特定のメソッドが間違いなく最も単純であるかどうかを判断する方法を読者が理解できるようにすることを目的としています。

以上が指定されたグラフ内の 2 つのノード間のパスが最短パスを表すかどうかを確認しますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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