Dijkstra演算法模板

2022-07-25 09:03:06 字數 1845 閱讀 4944

自己對dijstra演算法的理解是:

首先輸入儲存點,邊的權值(注意無向圖和有向圖在儲存時的區別)。

將表示從起點st到頂點 i 的距離的d[ i ]陣列的每乙個值初始化為inf,令d[st] = 0。

遍歷d[ ]陣列的下標 i (即頂點 i)這個操作是通過優先佇列來實現的,然後遍歷以頂點 i 為起點的邊,更新d[ i ]的最小值。

最後直接訪問d[en],即可得到最短距離。

通過模板題來熟悉一下這個演算法吧,最短路之hdu2544

1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8

#define inf 0x3f3f3f3f

9#define fre() freopen("in.txt","r",stdin)

1011

using

namespace

std;

12 typedef long

long

ll;13 typedef pair p;//

first是距離,second是點的編號

14const

int maxn = 150;15

int d[maxn];//

陣列d[i]表示從起點s到頂點 i 的最短距離

16int

n,m;

17struct

edge

1820

int to;//

表示這條邊的終點

21int cost;//

該邊的權重

22};

23 vectorg[maxn];//

儲存以下標i為起點的邊

24 priority_queue,greater> que;//

遍歷d陣列的下標,更新最小值

2526

void

init()

2737}38

39int

main()

4063}64

}65 printf("

%d\n

",d[n]);66}

67return0;

68 }

view code

另外還有乙個用二維陣列的寫法:

1 #include 2 #include 3 #include 4

#define inf 0x3f3f3f3f56

using

namespace

std;

7const

int maxn = 100;8

9int

e[maxn][maxn];

10int

dis[maxn],vis[maxn];

11int

n,m;

1213

void

init()

1421}22

inta,b,c;

23for(int i = 0; i < m; i++)

2429

for(int i = 1; i <= n; i++)//

算出1到各個點的距離

3034 vis[1] = 1;35

}3637void

dij()

3850

}51 vis[u] = 1;52

for(int j = 1; j <= n; j++)

5358}59

}60}61

62int

main()

6370

return0;

71 }

view code

模板 Dijkstra演算法

劉汝佳陳鋒編著的演算法競賽入門經典訓練指南 比賽的時候把dijkstra寫炸了 大霧 比賽完去看了下書,順便發到部落格上 每次找書好麻煩的 include include include include define inf 0x3f3f3f3f using namespace std const ...

C spfa和dijkstra演算法模板

最短路模板題目。spfa 或 用堆優化的迪傑斯特拉演算法均可實現。成都浣花溪公園是一座有著詩歌文化氣息的公園,它以杜甫草堂的歷史文化內涵為背景,運用現代園林和建築設計的前沿理論,以自然雅緻的景觀和建築凸現川西文化醇厚的歷史底蘊,是一座集將自然景觀和城市景觀 古典園林和現代建築藝術有機結合的城市公園。...

最短路 Dijkstra演算法模板

最短路 dijkstra演算法 不能處理負權邊 未優化 時間複雜度為o n 2 n為頂點數 堆優化 時間複雜度大概為o m n logm m為邊數 模板題 未優化 p3371 模板 單源最短路徑 弱化版 模板題 堆優化 p4779 模板 單源最短路徑 標準版 code 未優化 include inc...