#include <algorithm>
#include <iostream>
#include <cstdio>
#include <cstring>
#include <stack>
#define INF 999999
using namespace std;
int G[203][203];
int n, s, t;
bool Dijkstra()
{
int i, j, k;
int dis[203];
bool vis[203];
int pre[203];//記錄路徑
memset(vis,false,sizeof(vis));
fill(dis,dis+n,INF);
memset(pre,-1,sizeof(pre));//初始化為-1
dis[s] = 0;
for(i=0;i<n;i++)
{
k = -1;
for(j=0;j<n;j++)
if(vis[j] == false && (k == -1 || dis[k]>dis[j]))
k = j;
if(k == -1)
break;
vis[k] = true;
for(j=0;j<n;j++)
if(vis[j] == false && dis[j]>dis[k]+G[k][j]){
dis[j] = dis[k]+G[k][j];
pre[j] = k;//在松弛操作中更新邊的同時 記錄路徑
}
}
printf("%d——>%d 的最短路為 :",s,t);
printf("%d\n",dis[t]);
printf("路徑為 :");
//一下部分為路徑的還原
stack<int >que;
for(t;t!=-1;t=pre[t])//從t 一直尋找到s
que.push(t);//放入棧中
printf("%d",que.top());//輸出第一個
que.pop();//刪除
while(!que.empty()){
printf("——>%d",que.top());//輸出
que.pop();//刪除
}
printf("\n");
}
int main()
{
int i, j, u, v, w, m;
while(scanf("%d %d",&n,&m)==2){
for(i=0;i<n;i++)
for(j=0;j<n;j++)
G[i][j] = i==j?0:INF;
while(m--){
scanf("%d %d %d",&u,&v,&w);
if(G[u][v]>w)
G[u][v] = G[v][u] = w;
}
scanf("%d %d",&s,&t);
Dijkstra();
}
return 0;
}
/*
3 3
0 1 1
0 2 3
1 2 1
0 2
2
0->1->2
*/
路徑還原
最后編輯于 :
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。
相關(guān)閱讀更多精彩內(nèi)容
- 1、基礎(chǔ)信息百詞斬是英語單詞類排名靠前的應(yīng)用。通過搞怪有趣的圖片、視頻、小課堂、對戰(zhàn)、組隊(duì)背單詞、鎖屏背單詞、邊走...
- 百詞斬是英語單詞類排名靠前的應(yīng)用。通過搞怪有趣的圖片、視頻、小課堂、對戰(zhàn)、組隊(duì)背單詞、鎖屏背單詞、邊走邊聽等方式幫...
- !如需索要對應(yīng)備課案,請聯(lián)系作者 概要 用戶歷程圖是一種表達(dá)用戶體驗(yàn)路徑的工具:表達(dá)用戶在嘗試實(shí)現(xiàn)他的目標(biāo)時,產(chǎn)品...
- 當(dāng)你差不多的去生活,那些優(yōu)秀的人早已從你的世界消失,你已經(jīng)淪入落后的80%,然后還盲目地在這80%里尋求差不多……...