算法思想
該算法是爲了求出所有點與點之間最短的距離,可以通過n次調用dijkstra算法來求出,也可以採用此算法,該算法通過不斷在兩點之間加入點來獲取;兩點之間最短的距離,直到所有的點都加入後,求出的值就是最小的距離。
代碼實現
需要存儲鄰接矩陣的數組p,還有存儲各點之間路徑的字符串數組p2。
首先若兩點之間是直接相連的,鄰接矩陣中對應的元素賦值爲它們之間的權,然後從0結點開始一直到n節點,不斷地向各個邊之間加入節點,判斷加入後的距離是否比原先的小,然後變更p和path中的值,這樣一直到到循環結束,獲得的就是各點與各點之間最小的距離。
for(int i=0;i<b;i++)
{
cin>>tail>>head;
cin>>p[tail][head];
}
for(int i=0;i<a;i++)
{
p[i][i]=0;
}
for(int k=0;k<a;k++)
{
for(int i=0;i<a;i++)
{
for(int j=0;j<a;j++)
{
if((p[i][k]+p[k][j])<p[i][j])
{
p[i][j]=p[i][k]+p[k][j];
p2[i][j]=p2[i][k];
p2[i][j].push_back(48+k);
p2[i][j]+=p2[k][j];
}
}
}
}