Bellman-Ford算法示例
来源:互联网 发布:重庆大学网络服务中心 编辑:程序博客网 时间:2024/04/29 14:04
#include <stdio.h>int main(){ int dis[10],n,m,u[10],v[10],w[10]; int inf=99999999; scanf("%d %d",&n,&m);//输入点数和边数 for(int i=1; i<=m; i++) scanf("%d %d %d",&u[i],&v[i],&w[i]);//输入两条边和距离 for(int i=1; i<=n; i++)//初始化一号顶点到其余各个顶点的路程 dis[i]=inf; dis[1]=0;//初始化点1到自己的距离为0 for(int k=1; k<=n-1; k++)//Bellman核心算法语句,最多运行n-1次 { int check=0; for(int i=1; i<=m; i++) { if(dis[v[i]] > dis[u[i]]+w[i]) { dis[v[i]] = dis[u[i]]+w[i]; check = 1; } } if(check == 0) break;//由于最多运行n-1次,所以一旦全部松弛完毕就直接跳出 } for(int i=1; i<=n; i++) printf("%d ",dis[i]); return 0;}
input:
5 52 3 21 2 -31 5 54 5 23 4 3
output:
0 -3 -1 2 4
- 需要松弛4轮,每轮松弛结果为:
0 -3 ∞ ∞ 5
0 -3 -1 2 5
0 -3 -1 2 4
0 -3 -1 2 4
- 简单解析:
Bellman-Ford核心算法语句非常简单,最多松弛n-1轮,即有可能在n-1轮之前已经松弛完毕,所以加入check变量判断是否松弛完毕,以便减少时间 - Bellman-Ford算法适用于解决负权边的问题
- 可以检测一个图是否含有负权回路,如果n-1次松弛完毕后再运行,依然可以松弛,表明这个图含有负权回路
0 0
- Bellman-Ford算法示例
- Bellman-Ford&SPFA算法
- Bellman-ford算法实现
- Bellman-Ford 算法详解
- Bellman-Ford算法
- Bellman-Ford算法
- Bellman-Ford路由算法
- Bellman-Ford算法分析
- bellman ford算法
- Bellman-Ford算法
- Bellman-Ford算法总结
- Bellman-ford算法
- bellman-ford算法
- bellman-ford 算法
- Bellman-Ford算法
- Bellman-Ford算法
- bellman ford 算法
- Bellman-Ford 算法
- NAT穿透原理
- spring mvc xml文件配置
- 如何配置一项在崩溃或重启后自动启用的Linux服务——第二部分:参考
- 算法 java EOF
- 软件测试面试题+参考答案
- Bellman-Ford算法示例
- iOS开发---CocoaPods和Podfile使用
- chrome总是提示\"喔唷,崩溃啦\"怎么解决
- iOS 视频捕获系列Swift之AVFoundation(一)
- WebRTC学习资料大全
- SpringMvc+Angularjs 多文件批量上传
- DBoW2在windows上的vs工程搭建方法
- 【C#】winfrom得到编号,显示对应的其他表的名称
- 基于视觉的动态目标识别——笔记