日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Codeup墓地-问题 D: 最短路径

發布時間:2024/2/28 编程问答 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Codeup墓地-问题 D: 最短路径 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

題目描述

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

輸入

輸入包含多組測試數據。

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

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

輸出

每組輸出占兩行。

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

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

樣例輸入

3 3 1 3 1 3 3 1 2 1 2 3 1

樣例輸出

2 1 2 3 #include <iostream> #include <vector> using namespace std;const int maxn = 1000; const int inf = 1000000000;int n, m, s, t; //n個城市,m條道路,起點s,重點t struct node {int v;int dis;node(int _x, int _y){v = _x;dis = _y;} }; vector<node> adj[maxn]; vector<int> pre[maxn]; vector<int> temp, ans; bool vis[maxn] = {false}; int d[maxn];void dij(int s) {fill(d, d+maxn, inf);d[s] = 0;for(int i = 0; i < n; i++){int u = -1, min = inf;for(int j = 0; j < n; j++){if(vis[j] == false && d[j] < min){u = j;min = d[j];}}if(u == -1) return;vis[u] = true;for(int j = 0; j < adj[u].size(); j++){int v = adj[u][j].v;if(vis[v] == false){if(d[u] + adj[u][j].dis < d[v]){d[v] = d[u] + adj[u][j].dis;pre[v].clear();pre[v].push_back(u);}else if(d[u] + adj[u][j].dis == d[v]){pre[v].push_back(u);}}}} }void dfs(int v) {if(v == s){temp.push_back(v);for(int i = temp.size() - 1; i >= 0; i--){if(ans.size() == 0){ans = temp;}else{if(temp[i] == ans[i]) continue;else if(temp[i] < ans[i]){ans = temp;break;}else if(temp[i] > ans[i]) break;}}temp.pop_back();return;}temp.push_back(v);for(int i = 0; i < pre[v].size(); i++){dfs(pre[v][i]);}temp.pop_back(); }int main() {scanf("%d%d%d%d", &n, &m, &s, &t);for(int i = 0; i < m; i++){int a, b, d;scanf("%d%d%d", &a, &b, &d);adj[a].push_back(node(b,d));adj[b].push_back(node(a,d));}dij(s);if(d[t] == inf) printf("can't arrive");else{printf("%d\n", d[t]);dfs(t);for(int i = ans.size() - 1; i >= 0; i--){printf("%d ", ans[i]);}}return 0; }

?每次做一遍出來,都是答案錯誤50%....

排查半天,還是錯誤50%....

未完待解.....(算法虐我千百遍,我待算法如初戀)

總結

以上是生活随笔為你收集整理的Codeup墓地-问题 D: 最短路径的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。