#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
#define inf 0x3f3f3f3f
int map[205][205],d[205],v[205],n,m;
int Dijkstra(int s,int t)
{
int i,j,min,k;
memset(d,inf,sizeof d);
memset(v,0,sizeof(v));
d[s]=0;
for(i=1;i<n;i++)
{
min=inf;
for(j=0;j<n;j++)
{
if(!v[j]&&min>d[j])
{
min=d[j];
k=j;
}
}
v[k]=1;
for(j=0;j<n;j++)
{
if(d[j]>d[k]+map[k][j])
d[j]=d[k]+map[k][j];
}
}
return d[t];
}
int main()
{
int i,j,t,s,a,b,x,ans;
while(~scanf("%d%d",&n,&m))
{
memset(map,inf,sizeof(map));
for(i=1;i<=m;i++)
{
scanf("%d%d%d",&a,&b,&x);
if(map[a][b]>x)
map[a][b]=map[b][a]=x;
}
scanf("%d%d",&s,&t);
ans=Dijkstra(s,t);
if(ans!=inf)
printf("%d\n",ans);
else
printf("-1\n");
}
return 0;
}
Dijkstra算法
最新推荐文章于 2022-11-22 21:53:23 发布