C語言弗洛伊德演算法的實現

2021-07-26 07:54:44 字數 1310 閱讀 3732

弗洛伊德演算法和迪傑斯特拉演算法一樣,用於求兩個節點之間的最短路徑,過程也比迪傑斯特拉演算法更為簡單。以下是實現**:

首先仍然是預定義和型別定義:

#define ok 1

#define error 0

#define max_int 37262

#define mvnum 100

typedef int status;

typedef char vertextype;

typedef int arctype;

typedef structamgraph;

並定義兩個二維陣列:

int path[mvnum][mvnum];

arctype d[mvnum][mvnum];

建立有向圖:

int locatevex(amgraph *g, vertextype v)

return -1;

}status createudn(amgraph *g)

for (i = 0; i < g->vexnum; i++)

for (j = 0; j < g->vexnum; j++)

for (k = 0; k < g->arcnum; k++)

return ok;

}

弗洛伊德演算法:

void shortestpath_floyd(amgraph g)

for (k = 0; k < g.vexnum;k++)

for (i = 0; i < g.vexnum;i++)

for (j = 0; j < g.vexnum; j++) }

}

初始化:將d[i][j]賦值為i,j邊的權值,並判斷其權值若不為最大值(max_int),則將path[i][j]賦值為0,否則賦值為-1.

依次判斷i,j下標的邊的權值是否大於i、k和k、j下標邊的權值之和,若大於,則說明目前記錄的並非最短路徑,將i、k和k、j下標邊的權值之和賦值給d[i][k],並將path[k][j]賦值給path[i][j]。

加入main():

弗洛伊德演算法

弗洛伊德演算法 floyd 又稱為是插點法。目的是求加權圖中頂點中最短路徑的方法。本文通過舉例子的方法想你具體解釋何為弗洛伊德演算法。有乙個送禮物的問題,是csdn上的乙個題目,題目的詳情是這樣的。hehe和xixi在乙個地方玩遊戲,xixi把n 1件禮物 hehe以前送給xixi的 分別藏在了另外...

弗洛伊德演算法

floyd演算法詳解 求解任意兩點間的最短距離 floyd warshall演算法,簡稱floyd演算法,用於求解任意兩點間的最短距離,時間複雜度為o n 3 我們平時所見的floyd演算法的一般形式如下 1void floyd 注意下第6行這個地方,如果dist i k 或者dist k j 不存...

弗洛伊德演算法

弗洛伊德演算法 求任意一點i到任意一點j的最短路。分析 求i到j的最短路,大可以使用群舉法,因為點都是離散的,i到j的路徑是有限的,所以一定可以通過群舉法得到最短路,但群舉法卻沒太大意義,他的意義在於 把群舉法 通過修改 進行分類,得到好的演算法。flod演算法的分類標準是 通過i到j過點的情況進行...