zoukankan      html  css  js  c++  java
  • 最短路-Bellman-Ford算法

    问题描述

    给定一个n个顶点,m条边的有向图(其中某些边权可能为负,但保证没有负环)。请你计算从1号点到其他点的最短路(顶点从1到n编号)。

    输入格式

    第一行两个整数n, m。

    接下来的m行,每行有三个整数u, v, l,表示u到v有一条长度为l的边。

    输出格式
    共n-1行,第i行表示1号点到i+1号点的最短路。
    样例输入
    3 3
    1 2 -1
    2 3 -1
    3 1 2
    样例输出
    -1
    -2
    数据规模与约定

    对于10%的数据,n = 2,m = 2。

    对于30%的数据,n <= 5,m <= 10。

    对于100%的数据,1 <= n <= 20000,1 <= m <= 200000,-10000 <= l <= 10000,保证从任意顶点都能到达其他所有顶点。

    #include<iostream>
    #define MAX 20001
    using namespace std;
    struct edge{ int from, to, cost; };
    edge es[200001], e;
    int d[MAX];
    int V, E;
    int INF = (1 << 30);
    
    void shortest_path(int s)
    {
        for (int i = 0; i <= V; i++)d[i] = INF;
        d[s] = 0;
        bool update;
    
        while (true)
        {
            update = false;
            for (int i = 1; i <= E; i++)
            {
                e = es[i];
                if (d[e.from] != INF && d[e.to] > d[e.from] + e.cost)
                {
                    d[e.to] = d[e.from] + e.cost;
                    update = true;
                }
            }
            if (!update)break;
        }
    }
    int main()
    {
        cin >> V >> E;
        for (int i = 1; i <= E; i++)
            cin >> es[i].from >> es[i].to >> es[i].cost;
        shortest_path(1);
        for (int i = 2; i <= V; i++)
            cout << d[i] << "
    ";
    
        system("pause");
        return 0;
    }
    View Code
    世上无难事,只要肯登攀。
  • 相关阅读:
    py 5.11
    py 5.10
    py 5.9
    py 5.8
    python 5.7
    python 5.4
    python 5.3
    python 5.2
    python 4.28
    python 4.27
  • 原文地址:https://www.cnblogs.com/littlehoom/p/3546167.html
Copyright © 2011-2022 走看看