HDU 2544 最短路 (dijkstra算法)

地址:http://acm.hdu.edu.cn/showproblem.php?pid=2544

思路:(dijkstra算法)

代码如下:

 1 #include<stdio.h>
 2  #include<string.h>
 3  #include<stdlib.h>
 4  #define Max 0xfffffff
 5  int m[10010][10010],p[10010];
 6  bool vis[10010];
 7  int vexnum,arcnum;
 8  void dijstra()
 9  {
10      int i,j,k,t,min;
11      memset(vis,0,sizeof(vis));
12      for(i=1;i<=vexnum;++i)
13          p[i]=m[1][i];
14      for(vis[1]=k=1;k<vexnum;++k){
15          for(min=Max,i=1;i<=vexnum;++i)
16              if(!vis[i]&&min>p[i]){
17                  min=p[i];
18                  t=i;
19              }
20              vis[t]=1;
21              for(i=1;i<=vexnum;++i)
22                  if(!vis[i]&&p[i]>min+m[t][i])
23                      p[i]=min+m[t][i];
24      }
25  }
26  int main()
27  {
28      int i,j,a,b,w;
29      while(~scanf("%d%d",&vexnum,&arcnum),vexnum||arcnum){
30          for(i=1;i<=vexnum;++i)
31              for(j=1;j<=vexnum;++j)
32                  m[i][j]=m[j][i]=Max;
33          for(i=0;i<arcnum;++i){
34              scanf("%d%d%d",&a,&b,&w);
35              m[a][b]=m[b][a]=w;
36          }
37          dijstra();
38          printf("%d\n",p[vexnum]);
39      }
40      system("pause");
41      return 0;
42  }

posted on 2012-08-21 16:15  mycapple  阅读(1182)  评论(0编辑  收藏  举报

导航