/*2018.7.10*/
/*练习迪杰斯特拉,无STL,加油!*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
#include <iostream>
#include <algorithm>
using namespace std;
#define MAXSIZE 100
#define INF 100000
int v[MAXSIZE];
int m[MAXSIZE][MAXSIZE];
int n,e;
int p[MAXSIZE];
int d[MAXSIZE];
void Dijkstra(int s)
{
int i,j,k,mi;
d[s]=0;
for(j=0;j<n;j++)
{
mi=INF;
for(i=1;i<=n;i++)
{
if(!v[i]&&d[i]<mi)
{
mi=d[i];
k=i;
}
}
v[k]=1;
for(i=1;i<=n;i++)
{
if(!v[i]&&d[k]+m[k][i]<d[i])
{
d[i]=d[k]+m[k][i];
p[i]=k;
}
}
}
}
void print_path(int s,int en)
{
if(s!=p[en])
print_path(s,p[en]);
cout<<"->"<<en;
}
int main()
{
int i,j;
while(cin>>n>>e)
{
for(i=1;i<=n;i++)
p[i]=d[i]=INF;
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
m[i][j]=INF;
for(i=0;i<e;i++)
{
int a,b,t;
cin>>a>>b>>t;
m[a][b]=m[b][a]=t;
}
int s,en;
cin>>s>>en;
Dijkstra(s);
cout<<s;
print_path(s,en);
cout<<endl;
cout<<d[en]<<endl;
}
}
复习单源最短路径
最新推荐文章于 2024-04-05 14:11:56 发布