//九度教程78 dijkstra算法之单源最短路径

来源:互联网 发布:淘宝保价是什么意思 编辑:程序博客网 时间:2024/06/16 09:42
//九度教程78 dijkstra算法之单源最短路径//http://ac.jobdu.com/problem.php?cid=1040&pid=77#include<stdio.h>#define MAXN 1047483640int mm[102][102],flag[102],value[102];int main(){int a,b,i,j,n,m,k;while(~scanf("%d %d",&n,&m)){if(n==0&&m==0)return 0;if(n==1){printf("0\n");continue;}//只有一个路口,必然0分钟可抵达。for(i=0;i<=n;i++){flag[i]=1;//1为还没进集合,0为已进集合value[i]=MAXN;for(j=0;j<=n;j++)mm[i][j]=MAXN;}flag[1]=0;//初始只包含1这个结点集合value[k=1]=0;//起始点的花费为0;k初值为起始点1。for(i=0;i<m;i++)//读入m条边{scanf("%d %d",&a,&b);scanf("%d",&mm[a][b]);mm[b][a]=mm[a][b];}while(k!=n){for(i=k,j=1;j<=n;j++){if(j==k)continue;if(value[j]>value[k]+mm[k][j])value[j]=value[k]+mm[k][j];}for(k=1;flag[k]==0;k++);//把k指向那个为被包含的顶点,为了下步做准备。for(i=1;i<=n;i++){if(flag[i]&&value[k]>value[i])k=i;}flag[k]=0;//设置已把k包含进来的标志}printf("%d\n",value[k]);}return 0;}

原创粉丝点击