Bellman-Ford算法(有向图)

Posted asuml

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Bellman-Ford算法(有向图)相关的知识,希望对你有一定的参考价值。

#include <iostream>
#include <cstring>
#include <cstdio>

#define MAX 100
#define INF 0x3f3f3f
using namespace std;
//有向图
struct Edge
{
    int u,v,cost;
}e[MAX];
int dist[MAX];  //最短路径
int prev[MAX];  //路径
int m,n;    //边数和顶点数

bool Bellman_Ford(int v0)
{
    int u=v0;
    for(int i=1;i<=n;i++)
        dist[i]=INF;
    dist[u]=0;
    for(int i=1;i<=n;i++)
        for(int j=0;j<m;j++)
            if(dist[e[j].v]>dist[e[j].u]+e[j].cost)
            {
                dist[e[j].v]=dist[e[j].u]+e[j].cost;
                prev[e[j].v]=e[j].u;
            }
    for(int i=0;i<m;i++)
        if(dist[e[i].v]>dist[e[i].u]+e[i].cost)
            return 0;
    return 1;
}

int main()
{
    cin>>n>>m;
    for(int i=0;i<m;i++)
        cin>>e[i].u>>e[i].v>>e[i].cost;
    if(Bellman_Ford(1))
        for(int i = 1; i <= n; ++i) //每个点最短路
        {
            printf("%d\n", dist[i]);
        }
    else
        printf("have negative circle\n");
    return 0;
}

 

以上是关于Bellman-Ford算法(有向图)的主要内容,如果未能解决你的问题,请参考以下文章

Bellman-Ford算法的适用条件&范围

算法笔记-----单源最短路径之Bellman-Ford算法

最短路径之Bellman-Ford算法

关于Dijkstra 和 Bellman-ford算法的简单理解

算法模板之SPFA

2018.3.10 bellman-ford algorithm, floyd-warshall algorithm and johnson's algorithm