1. 程式人生 > >floyd演算法多源有權最小路徑

floyd演算法多源有權最小路徑

需要兩個矩陣
D矩陣儲存距離,D[i][j] 儲存的就是 i 到 j 點的距離;
Path矩陣儲存路徑;

Floyd 演算法不能解決有負值圈的情況;
void Floyd(Graph G,int D[][Maxnum],int Path[][Maxnum])
{
	int i, j, k;
	for (i = 0; i < G->Nv; i++)
		for (j = 0; j < G->Nv; j++)
		{
			D[i][j] = G->G[i][j];  // copy 儲存圖的矩陣,如果 i 到 j 沒有邊,G[i][j] 值為無窮大
			Path[
i][j] = -1; } for (k = 0; k < G->Nv; k++) for (i = 0; i < G->Nv; i++for (j = 0; j < G->Nv; j++) if (D[i][j] < D[i][k] + D[k][j]) // 如果 i 到中間節點 k 的距離加上 k到 j 的距離小於 i 到 j 的距離 // 更新距離和路徑 , 經過 k 個節點 的 遞推,i 到 j 的距離必為最小值 { D[i][j] = D[i][k] + D[k][j]; Path[
i][j] = k;}