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算法
关于Dijkstra 和 Bellman-ford算法的简单理解
2018.3.10 bellman-ford algorithm, floyd-warshall algorithm and johnson's algorithm