码迷,mamicode.com
首页 > 编程语言 > 详细

[hiho 23]单源最短路-Dijstra算法

时间:2015-06-01 00:39:09      阅读:161      评论:0      收藏:0      [点我收藏+]

标签:

题目描述

维护一个集合,集合中的元素与点u的最短距离已经确定,求出集合内元素所能到达的点到点u的距离,取最短的距离对应的点加入集合直到集合包含点v。

每次更新距离只与新加入集合的点有关。

#include <stdio.h>
#include <string.h>
#include <algorithm>

#define N 1005

unsigned w[N][N];

int main(){
    memset(w, -1, sizeof(w));
    int n, m, u, v;
    scanf("%d%d%d%d", &n, &m, &u, &v);
    int from, to;
    unsigned weight;
    for (int i = 0; i < m; i++) {
        scanf("%d%d%u", &from, &to, &weight);
        weight = std::min(weight, w[from][to]);
        w[from][to] = w[to][from] = weight;
    }
    int min_idx;
    unsigned min;
    while (true) {
        min_idx = 1;
        min = w[u][1];
        for (int i = 2; i <= n; i++) {
            if (min > w[u][i]) {
                min = w[u][i];
                min_idx = i;
            }
        }
        for (int i = 1; i <= n; i++) {
            if (w[min_idx][i] != (unsigned)-1) {
               w[u][i] = std::min(w[u][i], w[u][min_idx] + w[min_idx][i]);
            }
        }
        if (min_idx == v) {
            break;
        } else {
            w[u][min_idx] = -1;
        }
    }
    printf("%u\n", w[u][v]);
    return 0;
}

[hiho 23]单源最短路-Dijstra算法

标签:

原文地址:http://www.cnblogs.com/xblade/p/4542980.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!