HDU 2544 最短路(dijkstra算法模板题)
这个应该是最简单的dijkstra算法应用了。。刚学的朋友可以那它练下,建图也毫无难度,就是模板吧。
1 #include<stdio.h> 2 #include<string.h> 3 #define INF 100000000 4 int map[110][110],dis[110],flag[110]; 5 int n,m; 6 void dijkstra() 7 { 8 int i,j,k,min; 9 memset(flag,0,sizeof(flag)); 10 flag[1]=1; 11 for(i=1;i<=n;i++) 12 dis[i]=map[1][i]; 13 for(i=1;i<=n;i++) 14 { 15 min=INF; 16 for(j=1;j<=n;j++) 17 { 18 if(!flag[j]&&dis[j]<min) 19 { 20 min=dis[j]; 21 k=j; 22 } 23 } 24 flag[k]=1; 25 for(j=1;j<=n;j++) 26 if(!flag[j]&&dis[j]>dis[k]+map[k][j]) 27 dis[j]=dis[k]+map[k][j]; 28 } 29 } 30 int main() 31 { 32 int i,j,u,v,w; 33 while(scanf("%d%d",&n,&m)!=EOF&&(m+n)) 34 { 35 for(i=1;i<=n;i++) 36 for(j=1;j<=n;j++) 37 map[i][j]=INF; 38 for(i=0;i<m;i++) 39 { 40 scanf("%d%d%d",&u,&v,&w); 41 map[u][v]=w; 42 map[v][u]=w; 43 } 44 dijkstra(); 45 printf("%d\n",dis[n]); 46 } 47 return 0; 48 }