【圖】Floyd算法簡述

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;
				}		
			}
		}
	}
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章