演算法思想:
輔助陣列dis[i] 表示當前源頂點到i的最短路徑。dis[i]在程式未結束前,類似於動態規劃,可更新以取得最小值
陣列path用來記錄路徑
首先初始化令dis[i]為edge[v0][i],v0為源頂點
,然後選擇離源頂點最小的路徑,加入到構造最短路徑的點集合中,然後看是否可以更新dis[i]的值,依次迴圈n-1次,即可得打正解.
測試**:
#include
#include
#include
#define max 1000
#define m 100
#define n 100
using namespace std;
int edge[m][n];
void dijkstra(int *path,int *dis,int v0,int n);
void showpath(int *path,int v,int v0);
int main()
int path[n+1];
int dis[n+1];
dijkstra(path,dis,1,n);
for(int q=2;q<=n;++q)}}
}void showpath(int *path,int v,int v0)
s.push(v);
while(!s.empty())
{cout<
Dijkstra 單源最短路徑
演算法思想 輔助陣列dis i 表示當前源頂點到i的最短路徑。dis i 在程式未結束前,類似於動態規劃,可更新以取得最小值 陣列path用來記錄路徑 首先初始化令dis i 為edge v0 i v0為源頂點 然後選擇離源頂點最小的路徑,加入到構造最短路徑的點集合中,然後看是否可以更新dis i ...
Dijkstra單源最短路徑
dijkstra單源最短路徑 給定乙個帶權有向圖g v,e 其中每條邊的權是乙個非負實數。另外,還給定 v 中的乙個頂點,稱為源。現在我們要計算從源到所有其他各頂點的最短路徑長度。這裡的長度是指路上各邊權之和。這個問題通常稱為單源最短路徑問題。下面給出兩個計算單源最短路徑的模板。dijkstra 簡...
單源最短路徑(Dijkstra)
dijkstra演算法基於貪心思想,計算乙個節點到其他所有節點的最短路徑。該演算法要求圖中不存在負權邊。時間複雜度 o n 基本演算法 將圖中所有的頂點v分成兩個頂點集合va和vb。如果源點s到u的最短路徑已經確定,則點u屬於集合va,否則屬於集合vb。最開始的時候va只包含源點s,其餘的點屬於vb...