HDU1874(最短路)

解题思路:题意很明确,就是求起点到终点的最短路,如果存在则输出该距离,否则输出 "-1"。求单源点的最短路径问题,我选用迪杰斯特拉算法,以前用过,所以比较熟悉。可这道题需要注意的地方很多,比如在输入时两个城镇之间可以有多条路,所以必须选择最短的一条;另外,在初始化时,城镇到自身的距离应该0,开始我一直初始化为最大值,在这里栽了很大跟头。以后会注意的。
ExpandedBlockStart.gif View Code
 1 #include<iostream>
 2  using  namespace std;
 3  #define MAX 0xfffffff
 4  #define max 205
 5  int map[max][max],sign[max];
 6 
 7  int main()
 8 {
 9      int n,m,i,j,a,b,d;
10      while(cin>>n>>m)
11     {
12          for(i= 0;i<n;i++)
13         {
14             sign[i]= 0;
15              for(j= 0;j<n;j++)
16             {
17                  if(i==j) map[i][j]= 0// 注意
18                   else map[i][j]=MAX;
19             }
20         }
21          while(m--)
22         {
23             cin>>a>>b>>d;
24              if(map[a][b]>d) map[a][b]=map[b][a]=d;  // 注意
25          }
26         cin>>a>>b;
27          int min,u;
28         sign[a]= 1;
29          for(i= 0;i<n;i++)
30         {
31             min=MAX;
32              for(j= 0;j<n;j++)
33                  if(!sign[j]&&min>map[a][j])
34                 {
35                     min=map[a][j];
36                     u=j;
37                 }
38                 sign[u]= 1;
39                  for(j= 0;j<n;j++)
40                      if(!sign[j]&&min+map[u][j]<map[a][j])
41                         map[a][j]=min+map[u][j];
42         }
43          if(map[a][b]<MAX)    cout<<map[a][b]<<endl;
44          else  cout<< " -1 "<<endl;
45     }
46      return  0;
47 }

转载于:https://www.cnblogs.com/yueshuqiao/archive/2012/02/18/2356782.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值