資料結構 點之間的最短距離 Floyd演算法

2021-09-07 02:47:23 字數 2134 閱讀 7719

floyd演算法

dijkstra演算法是用於解決單源最短路徑問題的,floyd演算法則是解決點對之間最短路徑問題的。floyd演算法的設計策略是動態規劃,而dijkstra採取的是貪心策略。當然,貪心演算法就是動態規劃的特例。

點對之間的最短路徑僅僅會有兩種情況:

兩點之間有邊相連。weight(vi,v

j)即是最小的。

通過還有一點:中介點,兩點相連,使weight(v

i,vv)+weight(v

v,vj)最小。

min_distance(vi

,vj)=min。正是基於這樣的背後的邏輯。再加上動態規劃的思想,構成了floyd演算法。

故當vv取全然部頂點後,distance(vi

,vj)就可以達到最小。floyd演算法的起點就是圖的鄰接矩陣。

題外話:**本身不重要。演算法思想才是精髓。

思想極難得到,而有了思想,稍加經驗就可以寫出**。向思想的開創者致敬。

思想非常難。**卻比較簡單。直接上**

類定義

#include#include#includeusing namespace std;

#define maxweight 100

#undef infinity

#define infinity 1000

class graph

;

類實現

//建構函式,指定頂點數目

graph::graph(int numv)

this->numv = numv; //構建鄰接矩陣。並初始化 matrix = new int*[numv]; int i, j; for (i = 0; i < numv; i++) matrix[i] = new int[numv]; for (i = 0; i < numv; i++) for (j = 0; j < numv; j++) } void graph::creategraph(int nume) this->nume = nume; int tail, head, weight, i; i = 0; cout << "輸入每條邊的起點(弧尾)、終點(弧頭)和權值" << endl; while (i < nume) matrix[tail][head] = weight; i++; } } graph::~graph() /* 弗洛伊德演算法 求各頂點對之間的最短距離 及其路徑 */ void graph::floyd() int d, v; for (v = 0; v < numv; v++) for (i = 0; i < numv; i++) for (j = 0; j < numv; j++) } //列印distance和prev陣列 cout << "distance..." << endl; for (i = 0; i < numv; i++) cout << endl << "prev..." << endl; for (i = 0; i < numv; i++) cout << endl; //列印頂點對最短路徑 stacks; for (i = 0; i < numv; i++) while (v != i); //列印路徑 cout << "頂點 " << i << " 到頂點 " << j << " 的最短路徑長度是 " << distance[i][j] << " ,其路徑序列是..."; while (!s.empty()) cout << endl; } } cout << endl; } //釋放空間 for (i = 0; i < numv; i++) deletedistance; deleteprev; } //列印鄰接矩陣 void graph::printadjacentmatrix() } bool graph::check(int tail, int head, int weight)

主函式

int main()

執行

floyd演算法**看似非常長,事實上並不難。**中非常多都是用於準備工作和輸出。關鍵**就是三層for迴圈。

若有所幫助,頂乙個哦。

專欄資料夾:

C 兩點之間最短距離

兩點之間最短距離 這是我的乙個測試,也是我學習html的 起點,他們說乙個合格的程式設計師必須學會html,我比他們起步晚了一些,可是我認為還來的及,以後我就用html來記錄我的學習記錄了。問題的提出 在二維平面的n個點上,找出其中的一對點,使得在n個點組成的所有的點中,該點對的距離最小。方法一 暴...

最短距離的點 ACM

給出一些整數對,它們表示一些平面上的座標點,給定乙個點,求所有那些點到該點最短距離的點。結構為 第乙個整數對為所給定的點,後面的整數對為所有其他的點。第乙個整數對為所給定的點,後面的整數對為所有其他的點。到第乙個點最短距離的點 樣例輸入 9 21 0 1 10 0 1 22 1 樣例輸入 2 1 i...

資料結構之分治法(最短距離) (十一)

package com.lip.datastructure author lip 分治法,所謂分治當然是分而治之,化整為零。分治法分為兩部分,1.分 divide 2.治 conquer 在排序演算法中我們用到的二分排序就是分治法最經典的乙個例子 傳統的分治法要執行兩次及其以上的遞迴演算法,一般用分...