#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
#include <queue>
#include<vector>
#include<string>
#define maxsum 11000000
using namespace std;
int n,m;
int map[110][110];
bool s[110];
int dist[110];
void dijkstra(int u){
memset(s,0,sizeof(s));
s[u]=1;
for(int i=1;i<=n;i++)
{
dist[i]=map[u][i];
}
dist[u]=0;
for(int i=1;i<=n;i++){
int tmp=maxsum;
int t=u;
for(int j=1;j<=n;j++)
if(!s[j]&&dist[j]<tmp)
{
t=j;
tmp=dist[j];
}
if(t==maxsum)
break;
s[t]=1;
for(int k=1;k<=n;k++)
if(!s[k]&&dist[k]>dist[t]+map[t][k])
dist[k]=dist[t]+map[t][k];
}
}
int main()
{
int a,b,c;
while(scanf("%d%d",&n,&m) != EOF)
{
if(n==0 && m==0) break;
for(int i = 1; i <= n; i++)
{
for(int j = 1; j <= n;j++)
{map[i][j]=map[j][i]=maxsum;} //初始化数组map
}//memset(map,maxsum,sizeof(map));这样的初始化会WA
for(int i = 1; i <= m; i++)
{
scanf("%d%d%d",&a,&b,&c);
map[a][b] = map[b][a] = c;
}
dijkstra(1);
printf("%d\n",dist[n]);
}
return 0;
}
hdu 2544 最短路
最新推荐文章于 2020-08-08 21:25:35 发布