/*
模版题,,dijkstra
*/
#include <stdio.h>
#include <string.h>
#define MAXN 100
#define inf 9999999
typedef int elem_t;
/*套了zju的o(∩_∩)o */
void dijkstra(int n,elem_t mat[][MAXN],int s,elem_t* min,int* pre){
int v[MAXN],i,j,k;
for (i=0;i<n;i++)
min[i]=inf,v[i]=0,pre[i]=-1;
for (min[s]=0,j=0;j<n;j++){
for (k=-1,i=0;i<n;i++)
if (!v[i]&&(k==-1||min[i]<min[k]))
k=i;
for (v[k]=1,i=0;i<n;i++)
if (!v[i]&&min[k]+mat[k][i]<min[i])
min[i]=min[k]+mat[pre[i]=k][i];
}
}
int main()
{
int n,m,a,b,c,s,t,i,j;
elem_t mat[MAXN][MAXN];
elem_t min[MAXN],pre[MAXN];
while(scanf("%d%d",&n,&m)!=EOF && !(n==0 && m==0))
{
for(i=0;i<n;++i)
for(j=0;j<n;++j)
mat[i][j]=inf;
for(i=0;i<m;++i)
{
scanf("%d%d%d",&a,&b,&c);
if(mat[a-1][b-1]>c)
{
mat[a-1][b-1]=c;
mat[b-1][a-1]=c;
}
}
dijkstra(n,mat,0,min,pre);
printf("%d\n",min[n-1]);
}
return 0;
}
hdu2544(最短路)
最新推荐文章于 2020-08-08 21:25:35 发布