hdu 2544 最短路

来源:互联网 发布:南笙的淘宝店 编辑:程序博客网 时间:2024/06/05 15:20
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2544
#include<stdio.h>#include<string.h>int map[105][10010],vis[105],d[105],N,M;void Djs(){    int x,y,i,j;    memset(vis,0,sizeof(vis));    for(i=1;i<=N;i++) d[i]=map[1][i];vis[1]=1;    for(i=1;i<N;i++)       {           int m=1000000;           for(y=1;y<=N;y++)           if(m>d[y]&&!vis[y])  {m=d[x=y];}//先访问最小的边,以免先访问大边的时候,把小边给标记,拿求的就不是最短路径了           vis[x]=1;           for(y=1;y<=N;y++)           if(!vis[y]&&d[y]>map[x][y]+d[x])//已经访问过了,就不加该值              d[y]=map[x][y]+d[x];       }       d[1]=0;}int main(){    int i,A,B,C;    while(scanf("%d%d",&N,&M),N+M)    {        memset(map,10,sizeof(map));        for(i=0;i<M;i++)           {               scanf("%d%d%d",&A,&B,&C);               map[A][B]=C;map[B][A]=C;           }        Djs();        printf("%d\n",d[N]);    }    return 0;}