のグラフ理論の最短のいくつかのアルゴリズム

のグラフ理論の最短のいくつかのアルゴリズム

1.Floyd

時間の複雑さ:O(V ^ 3)V :頂点( 頂点数(
複雑スペース:O(V ^ 2)

思想:DP
Gと[i] [j]は頂点J、および重量に対するI頂点から最小値を表します。
状態遷移方程式:G [I] [J] =分(G [I] [J]、G [i]が[K] + G [K] [J])
単純手段:頂点I頂点を通る頂点jへk及びkは頂点なしで最小値をとります。
初期設定:すべてのポイント間のINF距離は
、次のテンプレートコードの詳細を参照してください。

for(int k=1;k<=n;k++)//k循环必须放在最外层,放在第二层或第三层都会WA 因为一个k相当一个中转站。应该先对一个中转站将所有点压缩距离,然后再进行下一个中转站。如果对一个点进行所有中转站的遍历则没有压缩距离的效果 
			for(int i=1;i<=n;i++)//总结就是状态的转移是通过不同的i j 而不是通过不同的k 所以k在最外层。
				    if(g[i][k]!=inf)//一个优化:如果i k 之间没有路径 直接进行下一个i. 
				for(int j=1;j<=n;j++)
					g[i][j]=min(g[i][j],g[i][k]+g[k][j]);//此处用if 比 min 快一点。

ノートへフロイドのアルゴリズムいくつかの場所:
大幅1.時間複雑。これは、小規模なマップにのみ適用されます。
K 2. 3重ループは、特定の理由コードの最外層に説明されなければなりません。

ポータル質問:
フロイド裸のタイトルはhdu2544
フロイド推移閉包hdu1704を

-----------------------------------続けること------------ ------------------------

公開された18元の記事 ウォン称賛14 ビュー361

おすすめ

転載: blog.csdn.net/weixin_45750972/article/details/104483429