1. 程式人生 > >兩點之間最短路徑:弗洛伊德算法

兩點之間最短路徑:弗洛伊德算法

int code 指定 matrix ++ 計算 之間 logs 執行函數

弗洛伊德算法是計算無向有權圖中兩點間最短路徑的算法,復雜度為O(n^3)。其思路是將兩點間距離分為過(指定的)第三點或是不過,然後取它們的最小值,如此循環就可以得到兩點之間真正的最小值。

void floyd()
{
    for (int k = 0; k < n; ++k)
    {
        for (int i = 0; i < n; ++i)
        {
            for (int j = 0; j < n; ++j)
            {
                //在當前i到j經過k點的路徑與直連的路徑中選最短
                matrix[i][j] = min(matrix[i][j], matrix[i][k] + matrix[k][j]);
            }
        }
    }
}

其中,matrix為有n個點的圖的鄰接矩陣,若兩點沒有直連路徑則設相應的值為MAX。執行函數後的矩陣的對應項即為兩點最短距離

兩點之間最短路徑:弗洛伊德算法