1找到最短距離已經確認的頂點,從它出發更新相鄰頂點的最短距離
2此後不需要關心1中的「最短距離已經確認的頂點」
堆中元素共有o(v)個,更新和取出都有o(e)次,每次更新或取出堆的維護時間是o(lo**),因此該演算法的時間複雜度為o(elo**).
輸入兩個整數v,e,分別表示有向圖(無向圖就多新增一倍的邊)的的節點數,和邊數接下來e行,每行三個整數,分別表示,無向圖邊的連個端點以及權值
輸出一行v個整數,表示每個點到起點的最短路徑
7 10
1 2 2
1 3 5
2 3 4
3 4 2
2 4 6
4 6 1
2 5 10
5 6 3
5 7 5
6 7 9
有向:0 2 5 7 12 8 17無向:0 2 5 7 11 8 16
#include#include#includeusing namespace std;
const int max_v=10005;
const int inf=0x3f3f3f;
struct edge
};typedef pairp;//first是最短距離,second是頂點編號
int v;//頂點數
int e;//邊數
vectorg[max_v];
int d[max_v];
void read()
} }}
int main()
/*
7 10
1 2 2
1 3 5
2 3 4
3 4 2
2 4 6
4 6 1
2 5 10
5 6 3
5 7 5
6 7 9
0 2 5 7 12 8 17
*/#include#include#includeusing namespace std;
const int max_v=10005;
const int inf=0x3f3f3f;
struct edge
};typedef pairp;//first是該點入隊時的最短距離,second是頂點編號
int v;//頂點數
int e;//邊數
vectorg[max_v];
int d[max_v];
void read()
} }}
int main()
Dijkstra 單源最短路徑
演算法思想 輔助陣列dis i 表示當前源頂點到i的最短路徑。dis i 在程式未結束前,類似於動態規劃,可更新以取得最小值 陣列path用來記錄路徑 首先初始化令dis i 為edge v0 i v0為源頂點 然後選擇離源頂點最小的路徑,加入到構造最短路徑的點集合中,然後看是否可以更新dis i ...
Dijkstra 單源最短路徑
演算法思想 輔助陣列dis i 表示當前源頂點到i的最短路徑。dis i 在程式未結束前,類似於動態規劃,可更新以取得最小值 陣列path用來記錄路徑 首先初始化令dis i 為edge v0 i v0為源頂點 然後選擇離源頂點最小的路徑,加入到構造最短路徑的點集合中,然後看是否可以更新dis i ...
Dijkstra單源最短路徑
dijkstra單源最短路徑 給定乙個帶權有向圖g v,e 其中每條邊的權是乙個非負實數。另外,還給定 v 中的乙個頂點,稱為源。現在我們要計算從源到所有其他各頂點的最短路徑長度。這裡的長度是指路上各邊權之和。這個問題通常稱為單源最短路徑問題。下面給出兩個計算單源最短路徑的模板。dijkstra 簡...