記錄兩種最短路徑演算法,一種是迪傑斯特拉演算法,一種是弗洛伊德演算法:
最短路徑是指兩個頂點之間經過的邊上權值之和最少的路徑,並且我們稱路徑上的第乙個頂點是源點,最後乙個頂點是終點;
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 不支援負邊 求單源最短路徑,即起點...