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 }
View Code

 

posted @ 2013-09-11 10:51  hjf007  阅读(175)  评论(0编辑  收藏  举报