Bellman-Ford最短路径
Posted 上进小青年
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Bellman-Ford最短路径相关的知识,希望对你有一定的参考价值。
对于前面说到的最短路径的求解方法,不能解决负权边的情况,而Bellman-Ford却可以
共有n个顶点,m条边,每次输入u[i],v[i],w[i],代表从u[i]到v[i]的距离是w[i],对于所有的顶点进行n-1次松弛
还是直接看代码吧
1 #include<stdio.h> 2 #include<iostream> 3 #include<algorithm> 4 #include<string.h> 5 using namespace std; 6 const int inf=0x3f3f3f3f; 7 int main() 8 { 9 int m,n,u[100],v[100],w[100],dis[100]; 10 while(cin>>n>>m){ 11 for(int i=1;i<=n;i++){ 12 dis[i]=inf; 13 } 14 for(int i=1;i<=m;i++){ 15 cin>>u[i]>>v[i]>>w[i]; 16 } 17 dis[1]=0; 18 for(int k=1;k<=n-1;k++){ 19 for(int i=1;i<=m;i++){ 20 if(dis[v[i]]>dis[u[i]]+w[i]) 21 dis[v[i]]=dis[u[i]]+w[i]; 22 } 23 } 24 for(int i=1;i<=n;i++) 25 cout<<dis[i]<<" "; 26 } 27 } 28 29 30 /* 31 5 5 32 2 3 2 33 1 2 -3 34 1 5 5 35 4 5 2 36 3 4 3 37 输出:0 -3 -1 2 4 38 */
以上是关于Bellman-Ford最短路径的主要内容,如果未能解决你的问题,请参考以下文章
四大算法解决最短路径问题(Dijkstra+Bellman-ford+SPFA+Floyd)
求最短路径(Bellman-Ford算法与Dijkstra算法)
算法笔记:图论中的单源最短路径算法——Bellman-Ford 算法