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;}


原创粉丝点击