HDOJ 2544 Dijkstra实现

 1 #include <cstdio>
 2 #include <queue>
 3 #include <cstring>
 4 #include <cmath>
 5 
 6 using namespace std;
 7 
 8 #define N 100
 9 #define Infinity 233333333
10 
11 int main(){
12     int n, m;
13     while (scanf("%d %d", &n, &m), n != 0){
14         int map[n][n];
15         int dis[n];
16         bool shortest[n];
17         for (int i = 0; i < n; i++)
18             for (int j = 0; j < n; j++)
19                 map[i][j] = Infinity;
20         for (int i = 0; i < m; i++){
21             int begin, end, temp;
22             scanf("%d %d %d", &begin, &end, &temp);
23             begin -= 1;
24             end -= 1;
25             map[begin][end] = min(map[begin][end], temp);
26             map[end][begin] = min(map[end][begin], temp);
27         }
28         for (int i = 0; i < n; i++){
29             dis[i] = map[0][i];
30             shortest[i] = 0;
31         }
32         while (1){
33             int current = 0;
34             for (int i = 1; i < n; i++)
35                 if (!shortest[i] && dis[i] < dis[current])
36                     current = i;
37             if (current == n - 1){
38                 printf("%d\n", dis[current]);
39                 break;
40             }
41             shortest[current] = 1;
42             for (int i = 1; i < n; i++)
43                 if (dis[current] + map[current][i] < dis[i])
44                     dis[i] = dis[current] + map[current][i];
45         }
46     }
47     return 0;
48 }

 

转载于:https://www.cnblogs.com/neopolitan/p/7879773.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值