dijkstra的堆優化

2022-05-20 01:07:49 字數 1306 閱讀 8526

如題,給出乙個有向圖,請輸出從某一點出發到所有點的最短路徑長度。

第一行包含三個整數n、m、s,分別表示點的個數、有向邊的個數、出發點的編號。

接下來m行每行包含三個整數fi、gi、wi,分別表示第i條有向邊的出發點、目標點和長度。

一行,包含n個用空格分隔的整數,其中第i個整數表示從點s出發到點i的最短路徑長度(若s=i則最短路徑長度為0,若從點s無法到達點i,則最短路徑長度為2147483647)

輸入

4 6 1

1 2 2

2 3 2

2 4 1

1 3 5

3 4 3

1 4 4

輸出0 2 4 3

1 #include2

using

namespace

std;

3const

long

long inf=0x3f3f3f3f;4

long

long

n,m,s;

5long

long first[500009],next[500009],to[500009],w[500009

],tot;

6long

long dis[500009];7

bool book[500009

]; 8

struct

node

14};

15 priority_queueq;

16void add_edge(long

long a,long

long b,long

long

c)17

23 inline int

read()

2427

while(ch>='

0'&&ch<='9')

28return x*f;29}

30int

main()

37for(int i=1;i<=n;i++)dis[i]=inf;//

先將dis設為無限大

38node fir;

39 fir.val=0,fir.num=s;

40 dis[s]=0

;41 q.push(fir);//

離起點最短的第乙個入隊

42while(q.empty()==false)//

每次從離起點最近的點開始走

4359}60

}61for(int i=1;i<=n;i++)printf("

%lld

",dis[i]);

62 }

dijkstra和dijkstra堆優化模板

之前qaq一直沒有準備堆優化模板,本例以pat a1003為例,整理dijkstra和dijkstra堆優化模板 我們可以發現該篇幅找最小值部分是使用量乙個for迴圈 include include using namespace std int n,m,c1,c2 int edge 510 510...

dijkstra 堆優化 路徑

別人給的模板,所以不知道鏈結 include include include include include using namespace std define maxn 1020 define inf 0x3f typedef long long ll o nlogn typedef pair ...

模板 dijkstra 堆優化

複雜度o mlogn 輸入起點s,可以得到從起點到各點的最短路距離陣列dis i 1.初始化 清空標記陣列,初始化距離陣列設為inf,起點距離設為0,開優先佇列,搜尋起點 2.搜尋 取出隊首並pop,如果隊首節點u的當前最短路比u的原先的最短路大則跳過,否則遍歷u的鄰接點如果v沒有被訪問過且u的最短...