資料結構與演算法 26 弗洛伊德演算法

2021-10-07 11:20:47 字數 1483 閱讀 4543

設定頂點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 不存...