單源最短路

2021-10-08 21:53:09 字數 1289 閱讀 7557

題目描述

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

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

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

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

樣例輸入

4 6 1

1 2 2

2 3 2

2 4 1

1 3 5

3 4 3

1 4 4

樣例輸出02

43提示對於100%的資料:n<=10000,m<=100000。保證資料隨機。

#include .h>

using std:

:queue;

//在std的情況下執行命令

using std:

:memset;

//執行器銘

int n,m,st;

int a_size,head[

130000

],min_dis[

130000];

bool vis[

130000];

queue q;

struct farmer_johna[

130000];

inline void

add(int from

,int to,int dis)

inline void

write

(int x)

inline int read()

while

(ch>=

'0'&&ch<=

'9')

sum=sum*

10+ch-

'0',ch=

getchar()

;return sum*sign;

}inline void

spfa()

}}}}

int main()

spfa()

;for

(int i=

1;i<=n;i++)if

(min_dis[i]

!=0x3f3f3f3f

)write

(min_dis[i]),

putchar

('\n');

return0;

}

單源最短路

恢復內容開始 dijkstra spfa floyd多源變單源 熱浪 模板題 使用spfa過 spfa 從佇列中取出點進行鬆弛操作 使用st記錄點是否還在佇列中 如果這個點本來就存在佇列中那麼就重複加入點了void spfa int s 信使 廣播式求時間 求廣播所有點的最短時間 每個點接受到向他的...

多源最短路和單源最短路

多源最短路 例題 usaco08open clear and present danger s 單源最短路例題 dijkstra求最短路 i 給定乙個n個點m條邊的有向圖,圖中可能存在重邊和自環,所有邊權均為正值。請你求出1號點到n號點的最短距離,如果無法從1號點走到n號點,則輸出 1。輸入格式 第...

單源最短路徑

include define max 999 define maxverts 10 typedef struct graph void chushi graph g void dij graph int key,int int int main for i 1 i g.numverts i dij ...