HDOJ1874 ( 畅通工程续 ) 【单源最短路径】

Problem : 1874 ( 畅通工程续 )     Judge Status : Accepted
RunId : 5991510    Language : C++    Author : qq1203456195
Code Render Status : Rendered By HDOJ C++ Code Render Version 0.01 Beta
 1 /*Dijstra*/
 2 #include <iostream>
 3 #include <cstring>
 4 #include <cstdlib>
 5 using namespace std;
 6 #define MAX 0x3f3f3f3f
 7 #define max 202
 8 int map[max][max],visited[max];
 9 
10 int main()
11 {
12     int n,m,i,j,a,b,d;
13     while(cin>>n>>m)
14     {
15         memset(map,MAX,sizeof(map));
16         for(i=0;i<n;i++)
17         {
18             visited[i]=0;//访问标志位
19             map[i][i]=0;//注意
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;//s 和 t
27         int min,u;
28         visited[a]=1;
29         for(i=0;i<n;i++)
30         {
31             min=MAX;
32             for(j=0;j<n;j++)
33             {
34                 if(!visited[j]&&min>map[a][j])//j没有被访问,且和a之间的距离最短,记录为u
35                 {
36                     min=map[a][j];//min为a到j的距离
37                     u=j;
38                 }
39             }
40             visited[u]=1;//u被访问了
41             for(j=0;j<n;j++)//更新a的邻接点
42             {
43                 if(!visited[j]&&min+map[u][j]<map[a][j])//j没有被访问,并且min+map[u][j]<map[a][j]
44                     map[a][j]=min+map[u][j];
45             }
46         }
47         if(map[a][b]<MAX)    cout<<map[a][b]<<endl;
48         else  cout<<"-1"<<endl;
49     }
50     return 0;
51 }

 

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值