#include<iostream>
using namespace std;
#define N 110
#define INF 1000000
int map[N][N];
int dis[N];
int n;
void bellman(int start)
{
for(int i=0;i<n;i++) dis[i]=map[start][i];
for(int k=2;k<n;k++)
{
for(int i=0;i<n;i++)
{
if(i!=start)
{
for(int j=0;j<n;j++)
{
if(map[j][i]<INF&&dis[j]+map[j][i]<dis[i]) dis[i]=dis[j]+map[j][i];
}
}
}
}
}
int main()
{
int a,b,c,m;
while(cin>>n>>m)
{
if(n==0&&m==0) break;
for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
{
if(i!=j) map[i][j]=INF;
else map[i][j]=0;
}
}
for(int k=0;k<m;k++)
{
cin>>a>>b>>c;
if(map[a-1][b-1]>c)
{
map[a-1][b-1]=c;
map[b-1][a-1]=c;
}
}
bellman(0);
cout<<dis[n-1]<<endl;
}
return 0;
}
最短路径bellman-ford算法模板
最新推荐文章于 2024-03-24 18:34:34 发布