Floyd算法有於求一個帶權有向圖(Wighted Directed Graph)的任意兩點的最短距離的算法,運用了動態規劃的思想。
核心思想:在兩個頂點之間插入一個或一個以上的中轉點,比較經過與不經過中轉點的距離哪個更短。同時,我們需要引入2個矩陣,一個鄰接矩陣A,用來計算每個相鄰點的距離,也就是我們的已知條件,第二個矩陣Path,則用來表示中間點k的代數。
代碼實現:
//Floyd
void Floyd(Graph G){
int A[maxsize][maxsize];
int Path[maxsize][maxsize];
//初始化
for(int i=0;i<G.vexnum;i++){
for(int j=0;j<G.vexnum;j++){
A[i][j]=G.Edge[i][j];
Path[i][j]=-1;
}
}
for(int k=0;k<G.vexnum;k++){
for(int i=0;i<G.vexnum;i++){
for(int j=0;j<G.vexnum;j++){
if(A[i][j]>A[i][k]+A[k][j]){
A[i][j]=A[i][k]+A[k][j];
Path[i][j]=k;
}
}
}
}
}