演算法筆記 問題 D 最短路徑

2021-10-18 01:41:55 字數 1124 閱讀 7804

題目描述

有n個城市m條道路(n<1000, m<10000),每條道路有個長度,請找到從起點s到終點t的最短距離和經過的城市名。

輸入輸入包含多組測試資料。

每組第一行輸入四個數,分別為n,m,s,t。

接下來m行,每行三個數,分別為兩個城市名和距離。

輸出每組輸出佔兩行。

第一行輸出起點到終點的最短距離。

第二行輸出最短路徑上經過的城市名,如果有多條最短路徑,輸出字典序最小的那條。若不存在從起點到終點的路徑,則輸出「can't arrive」。

樣例輸入 copy

3 3 1 3

1 3 3

1 2 1

2 3 1

樣例輸出 copy

2

1 2 3

#include using namespace std;

const int inf = (1)<<31-1;

const int maxn = 1010;

struct node;

};int n, m, s, t;

int dist[maxn];

vectoradju[maxn];

int pre[maxn];

bool visit[maxn] = ;

vectorpath, temppath;

void dij(int s)

dist[s] = 0;

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

}if(u==-1) return;

visit[u] = true;

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

else if(dist[u]+adju[u][v].w==dist[v]&&u}}}

}void dfs(int v, int s)

dfs(pre[v], s);

printf("%d ", v);

}int main()

for(int i=0; idij(s);

if(dist[t]==inf)

printf("can't arrive\n");

else

}return 0;

}

codeup 問題 D 最短路徑

題目描述 有n個城市m條道路 n 1000,m 10000 每條道路有個長度,請找到從起點s到終點t的最短距離和經過的城市名。輸入輸入包含多組測試資料。每組第一行輸入四個數,分別為n,m,s,t。接下來m行,每行三個數,分別為兩個城市名和距離。輸出每組輸出佔兩行。第一行輸出起點到終點的最短距離。第二...

最短路徑演算法筆記

public int networkdelaytime int times,int n,int k int res 0 for int i 1 i bellman ford每次找到更新後的點,實際上到不了n次就收斂了,若還不收斂說明有負權迴路,不是從源頭開始迭代,鬆弛時不確保父節點已確定,因此做了很...

最短路徑問題演算法

dijksatr演算法是典型最短路演算法,用於計算乙個節點到其他所有節點的最短路徑,主要特點是以起始點為中心向外層層擴充套件,直到拓展到終點為止。設g v,e 是乙個帶權有向圖,把圖中頂點集合v分成兩組,第一組為已求出最短路徑的頂點集合 用s表示,初始時s中只有乙個源點,以後每求得一條最短路徑 就將...