題目描述
有n個城市m條道路(n<1000, m<10000),每條道路有個長度,請找到從起點s到終點t的最短距離和經過的城市名。
輸入輸入包含多組測試資料。
每組第一行輸入四個數,分別為n,m,s,t。
接下來m行,每行三個數,分別為兩個城市名和距離。
輸出每組輸出佔兩行。
第一行輸出起點到終點的最短距離。
第二行輸出最短路徑上經過的城市名,如果有多條最短路徑,輸出字典序最小的那條。若不存在從起點到終點的路徑,則輸出「can't arrive」。
樣例輸入 copy
3 3 1 3樣例輸出 copy1 3 3
1 2 1
2 3 1
21 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中只有乙個源點,以後每求得一條最短路徑 就將...