最短経路問題--Bellman-フォード牛が家に来ティル

牛は帰宅ティル

ベッシーは、フィールドに出ているとファーマージョンは朝の搾乳のために彼女を覚醒する前にできるだけ多くの睡眠として取得するために納屋に戻って取得したいです。彼女は可能な限り迅速に戻って取得したいので、ベッシーは、彼女の美しさの睡眠を必要とします。

ファーマージョンのフィールドがN(2 <= N <= 1000)、その中のランドマーク、一意の番号1..Nを有しています。ランドマーク1は納屋です。ベッシーは終日立ったリンゴの木グローブランドマークN.牛は、ランドマークの間の種々の長さのT(1 <= T <= 2000)双方向牛トレイルを使用してフィールドに移動されます。彼女はそれを開始した後、彼女はいつも最後までその開始から歩道にとどまるようベッシーは、彼女のナビゲーション能力の自信がないです。

ランドマーク間の道を考えると、ベッシーは納屋に戻って取得するために歩いてしなければならない最小の距離を決定します。このようないくつかのルートが存在することが保証されています。

入力

* 1行目:二つの整数:TとN

*線2..T + 1:各行は3スペースで区切られた整数として歩道を説明しています。最初の二つの整数は、TRAILが移動する間のランドマークです。第三の整数は、範囲1..100軌跡の長さです。

出力

* 1行目:単一の整数、ベッシーはランドマーク1のランドマークNから取得するために移動しなければならない最小の距離。
 
ベルマン・フォード:最短経路アルゴリズムの思考センターの側に。これは、負の環の場合で見つけることができます。
図ストレージ構造: すべてのサイド情報が格納されています
1  CONST  INT MAXM = 1010 2  構造体の縁{ 
 3      int型、U。 
4      INT C。 
5      int型DIST。 
6  }。 
7エッジE [MAXM]。

 ソースノードからすべてのノードまで1.初期化プロセスの初期距離

1  CONST  INT INF = 1E9。 
2  ためのINT iは= 0 ; iが<= N; I ++ 3      DIST [I] = INF。 
4 DIST [Sノード] = 0 ;

ベルマン・フォード・プロセス

1  のためのINT iが= 0 ; iが<N- 1 ; I ++ ){ 
 2      BOOL ISOK = 3      用のint型 J = 0 ; J <M J ++ ){ 
 4          INT U = E [J] .U。 
5          int型、V = E [J] .V。 
6          int型 D = E [J] .dist。 
7          場合(DIST [U] + D < DIST [V]){ 
 8              DIST [V] = DIST [U] + D。 
9              ISOKは= 10             } 
 11          そう であれば(DIST [V] + D < DIST [U]){ 
 12              DIST [U] = DIST [V] + D。 
13              ISOKは= 14              } 
 15          } 
 16          もし(!ISOK)ブレーク17      }

ノードNの時間複雑さの数、エッジ数MO(N * M)

 •ノードにすべてのノードを最短距離の例を求めて1

 

 1.初期
のすべてのノードのDISTに送信元ノードから•距離

 

 2サイクル
()ステップ1•すべてのエッジを横切る、端縁の両端部は、ソース点から距離を更新します

  --1--22は5になります

  --1--33へ1

  --1--44は5になります

  --2--3更新することはできません

  --2--5更新することはできません

  --4--5ない更新

ソースノード•すべてのノードからディスト距離

 

 (b)工程2

•ソースからのすべての側面、距離の更新側端点の両端を横切ります

   --1--2更新されません

  --1--3更新されません

  --1--4更新されません

  --2--32は2となります

  --2--55は10となり

   --4--55は11となり

ソースノード•すべてのノードからディスト距離

 

 (c)工程3

•ソースからのすべての側面、距離の更新側端点の両端を横切ります

  --1--2更新されません

  --1--3更新されません

  --1--4更新されません

  --2--3更新されません

  --2--55になり7

  --4--5更新されません

ソースノード•すべてのノードからディスト距離

 

 (d)工程4

•ソースからのすべての側面、距離の更新側端点の両端を横切ります

  --1--2更新されません

  --1--3更新されません

  --1--4更新されません

  --2--3更新されません

  --2--5更新されません

  --4--5更新されません

ソースノード•すべてのノードからディスト距離

 

 (E)終了条件のすべてが更新されません

おそらくそれは、このプロセスは、以下のように問題のコードは解決し、次のとおりです。

1の#include <iostreamの>
 2の#include <cstdioを>
 3の#include <CStringの>
 4の#include <アルゴリズム>
 5  のconst  int型 N = 2020 6  CONST  INT = MAX 1E9。
7  使用して 名前空間はstdを、
8  構造体ノード{
 9      int型A、B、W。
10  }エッジ[N]。
11  整数N、M。
12  ボイドベル()
 13  {
 14      INT I、J。
15      INT   D [N]。
16     INT I = 1 ; Iは<= N-; I ++)// *は無限の距離を初期化; 
17      {
 18である          D [I] = MAX;
 19      }
 20である      D [ 1 ] = 0 ; // * 0は初期位置です。
21である     ため(私は= 1 ; I <= N; I ++ 22は     、{
 23である         ため(J = 1。 ; J <= M; J ++ 24          {
 25              IF(D [エッジ[J] II.A]> D [エッジ[J ] .B]エッジ+ [J] .W)D [エッジ[J] II.A] = D [エッジ[J] .B] + エッジ[J] .W、
 26は             IF(D [エッジ[J] .B]> D [エッジ[J] .A] +エッジ[J] .W)D [エッジ[J] .B] = D [エッジ[J] .A] + エッジ[ J] .W。
27          }
 28      }
 29      のprintf(" %D \ n " 、D [N])。
30  }
 31  のint main()の
 32  {
 33      INT I、A、B、C。
34      CIN >> M >> N。
35          のためにINT iは= 1 ; I <= M I ++)// *结构体存边和权
36          {
 37              CIN >> B >> C。
38              エッジ[I] .A = 39             エッジ[i]は.B = B。
40              エッジ[I] .W = C。
41          }
 42          ベル()。
43      リターン 0 44 }

 今、私たちは、一生懸命、問題のこれらの種類、そこSPFAか何かを把握する訓練を受けて、ゆっくり来ることができます!半分以上の訓練、是非!

おすすめ

転載: www.cnblogs.com/very-beginning/p/12207391.html