floyd算法

算法思想

該算法是爲了求出所有點與點之間最短的距離,可以通過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];
            }
        }
    }
    }
發佈了15 篇原創文章 · 獲贊 0 · 訪問量 615
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章