如題,給出乙個有向圖,請輸出從某一點出發到所有點的最短路徑長度。
第一行包含三個整數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
dijkstra
用鏈結矩陣表示圖會超時,因此可採用鏈結表表示。另外,從乙個頂點到另乙個頂點可能有多條邊,只要取其中較小的邊即可。
#include
#include
#include
#include
#include
#include
#include
#include
using namespace std; #define n 10005 #define inf 0x7fffffff int n, m, s; int d[n], visited[n] = ; struct node }; vector
g[n]; // 鏈結表表示圖 int get_i() return ans; } int main() } if(k == -1) break; visited[k] = 1; for(i=0; i
d[k] + g[k][i].v) d[g[k][i].to] = d[k] + g[k][i].v; } } for(i=1; i<=n; i++) cout<
洛谷 P3371 模板 單源最短路徑
題目大意 在乙個有向圖中,有m條邊 1 m 500000 n個點 1 n 10000 求點s到1 n個點的最短路徑長度,無最短路就輸出maxlongint。spfa 佇列優化 dis i 表示點s到i的最短路徑,一開始dis陣列為maxlongint。1.用佇列優化,就可以省略列舉每個點的時間,由o...
洛谷P3371 模板 單源最短路徑
p3371 模板 單源最短路徑 看了b站上的spfa演算法講解,重新敲了一遍這個題,學習spfa演算法。題意 給出乙個有向圖,請輸出從某一點出發到所有點的最短路徑長度。spfa演算法是對bellman ford演算法的優化。後者複雜度為o nm 每一輪都對所有邊確定是否更新。前者將點加入佇列中,用b...
洛谷 P3371 模板 單源最短路徑
如題,給出乙個有向圖,請輸出從某一點出發到所有點的最短路徑長度。輸入格式 第一行包含三個整數n m s 分別表示點的個數 有向邊的個數 出發點的編號。接下來 m 行每行包含三個整數fi gi wi,分別表示第 i 條有向邊的出發點 目標點和長度。輸出格式 一行,包含 n個用空格分隔的整數,其中第 i...