路徑還原

#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ù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 1、基礎(chǔ)信息百詞斬是英語單詞類排名靠前的應(yīng)用。通過搞怪有趣的圖片、視頻、小課堂、對戰(zhàn)、組隊(duì)背單詞、鎖屏背單詞、邊走...
    一夕閱讀 682評論 0 1
  • 百詞斬是英語單詞類排名靠前的應(yīng)用。通過搞怪有趣的圖片、視頻、小課堂、對戰(zhàn)、組隊(duì)背單詞、鎖屏背單詞、邊走邊聽等方式幫...
    一夕閱讀 1,042評論 0 1
  • !如需索要對應(yīng)備課案,請聯(lián)系作者 概要 用戶歷程圖是一種表達(dá)用戶體驗(yàn)路徑的工具:表達(dá)用戶在嘗試實(shí)現(xiàn)他的目標(biāo)時,產(chǎn)品...
    Acetx閱讀 4,657評論 0 51
  • 當(dāng)你差不多的去生活,那些優(yōu)秀的人早已從你的世界消失,你已經(jīng)淪入落后的80%,然后還盲目地在這80%里尋求差不多……...
    于帥Jacob閱讀 315評論 0 0
  • 剛看到一則新聞,一女子違停不聽從且妨礙執(zhí)法,抱著孩子推搡交警。交警將其撂倒,孩子倒地大哭不止。我不評論此條新聞,只...
    LZPAPWW閱讀 180評論 0 0

友情鏈接更多精彩內(nèi)容