hdu2544(最短路)
来源:互联网 发布:淘宝手机助手官网下载 编辑:程序博客网 时间:2024/05/21 07:53
/*模版题,,dijkstra*/#include <stdio.h>#include <string.h>#define MAXN 100#define inf 9999999typedef 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;}