#include <iostream>
#include <cstring>
using namespace std;
#define N 1000
#define inf 999999
int Map[N][N];
int dis[N];
int vis[N];
void D(int n)
{
int i,j;
int pos;
for(i=1;i<=n;i++)
{
dis[i]=Map[i][1];
}
vis[1]=1;
for(i=1;i<=n-1;i++)
{
pos=1;
int min=inf;
for(j=1;j<=n;j++)
{
if(!vis[j]&&dis[j]<min)
{
min=dis[j];
pos=j;
}
}
vis[pos]=1;
for(j=1;j<=n;j++)
{
if(!vis[j]&&dis[j]>dis[pos]+Map[j][pos])
dis[j]=dis[pos]+Map[j][pos];
}
}
if(dis[n]!=inf)
cout<<dis[n]<<endl;
else
cout<<"-1"<<endl;
}
int main()
{
int n,m;
int a,b,x;
int i,j;
while(cin>>n>>m)
{
memset(vis,0,sizeof(vis));
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
{
Map[i][j]=inf;
}
Map[i][i]=0;
}
for(i=1;i<=m;i++)
{
cin>>a>>b>>x;
if(Map[a][b]>x)
Map[a][b]=Map[b][a]=x;
}
D(n);
}
return 0;
}
最短路
最新推荐文章于 2024-10-25 19:32:27 发布