dijkstra單源最短路徑
給定乙個帶權有向圖g=(v,e) ,其中每條邊的權是乙個非負實數。另外,還給定 v 中的乙個頂點,稱為源。現在我們要計算從源到所有其他各頂點的最短路徑長度。這裡的長度是指路上各邊權之和。這個問題通常稱為單源最短路徑問題。
下面給出兩個計算單源最短路徑的模板。
dijkstra_
簡化版:時間複雜度
o(n^2)
,不可處理重邊圖
//計算圖的以s點為起點的單源最短路徑
//圖中節點從1到n編號
//執行dijkstrea之前,需要先把圖中兩點間的距離儲存在dist[i][j]中
//如果i到j不可達,那麼dist[i][j]==inf
#include#include#includeusing namespace std;
#define inf 1e8
const int maxn=1000+5;
int n;//圖節點數目,從1到n編號
int d[maxn];//單源最短距離
int dist[maxn][maxn];//dist[i][j]表示i到j的有向邊長
bool done[maxn];//done[i]表示d[i]是否已經計算完
//進入此函式前,需要將所有邊的距離儲存在dist中
void dijkstra(int s)
}
dijkstra_
標準版:時間複雜度
o(mlogn),
適用於稀疏圖
,可處理重邊圖
#include#include#include#includeusing namespace std;
const int maxn = 100+5;
#define inf 1e9
struct heapnode //dijkstra演算法用到的優先佇列的節點
bool operator < (const heapnode &rhs)const
};struct edge //邊
};struct dijkstra}}
}}dj;
int main()
dijkstra
應用
poj 1502 mpimaelstrom(dijkstra):模板入門。解題報告!
poj 1062 昂貴的聘禮(dijkstra):將購買禮物問題轉換為最短路徑問題。解題報告!
poj 3037skiing(dijkstra):先求各點間的距離,然後直接模板。解題報告!
poj 2387 tilthe cows come home(dijkstra簡單題):模板題。解題報告!
poj 3268silver cow party(dijkstra):來回的最短距離。解題報告!
poj 3013 bigchristmas tree(dijkstra):基本應用。解題報告!
hdu 1874 暢通工程續(簡單dijkstra):模板題。解題報告!
hdu 3790 最短路徑問題(dijkstra):二維目標條件。解題報告!
hdu 1535invitation cards(dijkstra):求原圖與逆圖的單源最短路徑。解題報告!
hdu 2544 最短路(簡單dijkstra):模板題。解題報告!
hdu 2066 乙個人的旅行(dijkstra):多源點多匯點求最短距離。解題報告!
hdu 1546idiomatic phrases game(dijkstra):轉換為單源最短路徑來做。解題報告!
hdu 2962trucking(dijkstra+二分):二分高度,判斷哪些邊能走求最短路徑。解題報告!
hdu 1595 findthe longest of the shortest(dijkstra):刪除一條邊,求最短路徑。解題報告!
hdu 2112 hdutoday(簡單dijkstra):模板題。解題報告!
hdu 1548 astrange lift(dijkstra):轉化為單源最短路徑問題。解題報告!
hdu 4849 wow!such city!(dijkstra):稠密圖單源最短路徑。解題報告!
hdu 2680choose the best route(簡單dijkstra):多源單匯問題。解題報告!
hdu 1596 findthe safest road(dijkstra):距離相加變為係數相乘。解題報告!
hdu 3499flight(dijkstra):邊權值減半,求最短距離。解題報告!
hdu 3986 harrypotter and the final battle(dijkstra):刪除一條邊,求可能的最短距離的最大值。解題報告!
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演算法基於貪心思想,計算乙個節點到其他所有節點的最短路徑。該演算法要求圖中不存在負權邊。時間複雜度 o n 基本演算法 將圖中所有的頂點v分成兩個頂點集合va和vb。如果源點s到u的最短路徑已經確定,則點u屬於集合va,否則屬於集合vb。最開始的時候va只包含源點s,其餘的點屬於vb...