Dijkstra單源最短路徑

2021-06-29 14:02:36 字數 2825 閱讀 9203

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...