Chri_K

djstra(打印路径)

#include<iostream>
using namespace std;
// int path[101]={0};
// void PrintPath(int start,int end)
// {
//     if(path[end]==0)
//     {
//         cout<<start<<"->"<<endl;
//     }
//     else
//     {
//         PrintPath(start,path[end]);
//         cout<<"->"<<endl;
//     }
// }
int main()
{
    int m,n;
    cin>>m>>n;
    int dst[n+1],st,en,edge[n+1][n+1],a,b,book[n+1]={0};
    int min,min_dis=0x7fffff;
    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=n;j++)
        {
            edge[i][j]=0x7fffff;
            edge[i][i]=0;
        }
    }
    for(int i=1;i<=n;i++)
    {
        cin>>a>>b;
        cin>>edge[a][b];
        edge[b][a]=edge[a][b];
    }
    cin>>st>>en;
    for(int i=1;i<=n;i++)
    {
        dst[i]=edge[st][i];
    }
    for(int j=1;j<=n;j++)
    {
        min_dis=0x7fffff;
        for(int i=1;i<=n;i++)
        {
            if(book[i]==0&&dst[i]<min_dis)
            {
                min=i;
                min_dis=dst[i];
            }
        }
        book[min]=1;
        for(int i=1;i<=n;i++)
        {
            if(dst[i]>dst[min]+edge[i][min])
            {
                dst[i]=dst[min]+edge[i][min];
                // path[i]=min;
            }
        }
    }
    cout<<dst[en]<<endl;
    //PrintPath(st,en);
    return 0;
}

posted on 2020-09-09 16:01  Chri_K  阅读(60)  评论(0)    收藏  举报