基礎演算法複習之六 最短路徑演算法

2021-08-25 02:53:40 字數 1109 閱讀 4639

記錄兩種最短路徑演算法,一種是迪傑斯特拉演算法,一種是弗洛伊德演算法:

最短路徑是指兩個頂點之間經過的邊上權值之和最少的路徑,並且我們稱路徑上的第乙個頂點是源點,最後乙個頂點是終點;

1.迪傑斯特拉演算法(djikstra),時間複雜度為o(n^2);

#include#include#include#include#includeusing namespace std;

//迪傑斯特拉演算法求最短路徑

//將所有頂點分為兩部分,一部分為最短路勁的頂點集合p,乙個為未知最短路徑的頂點集合q;

//visited=1表示在集合p中,否則在q中;

#define max_vertex 100

int weight[max_vertex][max_vertex], dis[max_vertex], visited[max_vertex];//假設有100個頂點

int vertexs, edges;

void init1()//初始化每兩個頂點間的權值;

} }}int main()

init2();

shortestpath_djikstra();

return 0;

}

2.弗洛伊德演算法,時間複雜度為o(n^3),本質是動態規劃

#include#include#include#include#includeusing namespace std;

//弗洛伊德演算法求最短路徑

//將所有頂點分為兩部分,一部分為最短路勁的頂點集合p,乙個為未知最短路徑的頂點集合q;

//visited=1表示在集合p中,否則在q中;

#define max_vertex 100

int weight[max_vertex][max_vertex], dis[max_vertex], visited[max_vertex];//假設有100個頂點

int vertexs, edges;

void init()//初始化每兩個頂點間的權值;

} }}int main()

shortestpath_floyd();

return 0;

}

最短路徑演算法 最短路

在每年的校賽裡,所有進入決賽的同學都會獲得一件很漂亮的t shirt。但是每當我們的工作人員把上百件的衣服從商店運回到賽場的時候,卻是非常累的!所以現在他們想要尋找最短的從商店到賽場的路線,你可以幫助他們嗎?input 輸入包括多組資料。每組資料第一行是兩個整數n m n 100,m 10000 n...

最短路徑演算法之Dijkstra演算法

參考 大話資料結構 這是乙個按照路徑長度遞增的次序產生最短路徑的演算法。它並不是一次求出源點到目標點的最短路徑,而是一步步求出它們之間頂點的最短路徑,過程中都是基於已經求出的最短路徑的基礎上,求得更遠頂點的最短路徑,最終得到想要的結果。define maxvex 9 define infinity ...

演算法 最短路徑演算法

ps 能求帶負邊圖,但不能帶負權迴路 可以求出任意兩點之間的最短路徑 主 for k 1 k n k for i 1 i n i for j 1 j n j if i j j k i k dis i j min dis i k dis k j dis i j ps 不支援負邊 求單源最短路徑,即起點...