(フロイド)エントリフロイドのアルゴリズム

このアルゴリズムは、実際には(01バックパックに類似)動的プログラミングアルゴリズムのビジョンに基づいて行われる
からコード基準とアイデアの一部最短パスアルゴリズム

セットディ、J、Jのみ(1 ... k)にIからKは、次にバックパック01という考え方に従って、中間ノードの最短経路長のノードの集合である頂点の頂点から1 J私はありませんKの後、それはそれがKの後、次いでDikk-1に2つの頂点分割を置く場合。ダイク-1,2-ある+ Djkk-1の二つの部分の
値と、対応するを見つけるために、3つのサイクルを使用します。
最後に、三次元アレイ、二次元アレイに変換することができ

3次元配列の形式:

void floyd()
{
	for(int i=1;i<=n;i++)
		for(int j=1;j<=n;j++)
			dis[i][j][0]=map[i][j];
	for(int k=1;k<=n;k++)
		for(int i=1;i<=n;i++)
			for(int j=1;j<=n;j++)
			{
				dis[i][j][k]=dis[i][j][k-1];
				if(dis[i][j][k]>dis[i][k][k-1]+dis[k][j][k-1])
					dis[i][j][k]=dis[i][k][k-1]+dis[k][j][k-1];
			}
} 

二次元配列の形式:

  for(int k =1 ;  k <= n ; k ++ ){
      for(int i =1 ; i<= n ; i++){
          for(int j =1 ;j<=n;j++){
                 dist[ i ][ j ]= min( dist[ i ][ j ],dist[ i ][ k ]+dist[ k ][ j ] );      
            }
       }
  }

締結する、フロイドのアルゴリズムは、複数の起源および複数のエンドに適しているが、ダイクストラ法は、開始点と終了点より好適です。

公開された72元の記事 ウォンの賞賛5 ビュー2821

おすすめ

転載: blog.csdn.net/qq_41115379/article/details/104878874