多源最短路徑:兩點之間的最短路徑。
二維矩陣,存放地點之間距離。
從4—>3,如果經過1的話,路徑是11,比12短。e[4][3]>e[4][1] e[1][3]
所以我們可以假設,如果兩點間隻允許經過1,那麼最短路徑應該如何計算?
判斷e[i][j]是否大于e[i][1] e[1][j],如果大于,則使e[i][j]=e[i][1] e[1][j]
我們對每個點都掃描一遍。(默認定義無窮為9999,通常設為99999999)
for(i=1;i<=n;i ) { for(j=1;j<=n;j ) { if(e[i][1]<9999 && e[1][j]<9999 && e[i][j]>e[i][1] e[1][j]) e[i][j]=e[i][1] e[1][j]; } }
掃描完必經過1的,就該繼續掃描必經過2的。
for(i=1;i<=n;i ) { for(j=1;j<=n;j ) { if(e[i][2]<9999 && e[2][j]<9999 && e[i][j]>e[i][2] e[2][j]) e[i][j]=e[i][2] e[2][j]; } }
所以我們整理一下:
for(k=1;k<=n;k ) for(i=1;i<=n;i ) for(j=1;j<=n;j ) if(e[i][k]<9999 && e[k][j]<9999 && e[i][j]>e[i][k] e[k][j]) e[i][j]=e[i][k] e[k][j];
輸出最短路徑:
printf("%d",e[i][j]);
更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!