設定頂點vi到頂點vk的最短路徑已知lik,頂點vk到vj的最短路徑已知為lkj,頂點vi到vj的路徑為lij,則vi到vj的最短路徑為:min((lik+lkj),lij),vk的取值為圖中所有頂點,則可獲得vi到vj的最短路徑
至於vi到vk的最短路徑lik或者vk的最短路徑lkj,是以同樣的方式獲得
中間頂點 出發頂點 終點
建立圖類class graph{} 定義變數 構造器 展示pre和dis陣列的方法
class
graph
}// show pre and dis
public
void
show()
;for
(int k =
0; k < dis.length;k++
) system.out.
println()
;// output one row of dis
for(
int i =
0;i) system.out.
println()
; system.out.
println()
;}}}
主函式測試圖
public
static
void
main
(string[
] args)
;// preliminary matrix
int[
] matrix =
newint
[vertex.length]
[vertex.length]
;final
int n =
65535
; matrix[0]
=new
int;
matrix[1]
=new
int;
matrix[2]
=new
int;
matrix[3]
=new
int;
matrix[4]
=new
int;
matrix[5]
=new
int;
matrix[6]
=new
int;
// create graph object
graph graph =
newgraph
(vertex.length, matrix, vertex)
; graph.
show()
;}
弗洛伊德(class graph{}中)
public
void
floyd()
}}}}
主函式中呼叫弗洛伊德方法 資料結構 弗洛伊德演算法
複習一下floyd演算法,實現很簡單,3個for迴圈,每一層迴圈的意思需要深刻的理解 推薦這片部落格 有該演算法的詳細解釋 2017.3.1 我下面的 有很明顯的缺點,所有的改動都是在原有的儲存矩陣之上,如果需要對原圖進行其他分析,需要複製乙個矩陣,對後者進行改動,傳遞至floyd函式內的引數不應為...
弗洛伊德演算法
弗洛伊德演算法 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 不存...