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;
}
浙公网安备 33010602011771号