Bellman-Ford(BF)和Floyd算法
2024-08-29 12:42:28
以下只是本人的笔记,想法我自己都怀疑,内容不作为参考,
Floyd算法就比较暴力了,算法思想是三重循环,直接枚举所有的顶点,再两次for循环枚举所有点,验证以第一个点为中转点的两个点是否路径更短,具体就不实现了
Dijkstra算法可以很好的解决无负权图的最短路径问题,但是如果出现负值权值就会失效。此时就需要BF算法,BF和dj算法都能解决单源最短路径问题,但是算法思想是完全不同的,dj是选取到起点路径最短的点,然后以该点为中心更新相关联的路径长,最外层的n次循环保证的是n个点均能被访问(见上篇博客)
但是BF算法完全不同,最外层的n-1次循环是为了保证成功构建n-1条路径,V个结点正好V-1个路径,如果转化成树则深度最多是V,但是在函数开始前根节点已经被访问了,所以最多只需要访问V-1次,其实不一定需要n-1次执行,可以适当剪枝,比如在n次循环中if(d[u]+length[u->v]<d[v)均为假,即没有可以松弛的边了,那就可以提前结束函数。内层的两次for循环的思想和dj差不多。
bool Bellman(int s){
for(int i=0;i<n-1;i++){
for(each edge u->v){
if(d[u]+length[u->v]<d[v]){
d[v]=d[u]+length[u->v];
}
}
}
for(each dege u->v){
if(d[u]+length[u->v]<d[v])
return false;
}
return true;
}
最新文章
- Xamarin+Prism开发详解四:简单Mac OS 虚拟机安装方法与Visual Studio for Mac 初体验
- having过滤语句
- mysql:添加索引
- Oracle-函数Decode进行多值判断
- Apache Kafka:下一代分布式消息系统
- 使用commons-fileUpload组件上传文件
- HW3.10
- java參数传递方式问题
- 我的java学习笔记(一)
- 快学Scala-第二章 控制结构和函数
- 我们一起来排序——使用Java语言优雅地实现常用排序算法
- 一、commander
- 【转】git - 简易指南
- JavaEE 之 Spring Data JPA
- Windows10环境下使用VisualSVN server搭建SVN服务器
- yum 安装 php5.6.36
- MySQL 单表优化
- JMeter学习(九)FTP测试计划(转载)
- 522. Longest Uncommon Subsequence II
- Tensorflow图像操作
热门文章
- [ASP.NET MVC 小牛之路]03 - Razor语法(转)
- 【转载】Maven+druid+MyBatis+Spring+Oracle+Dubbo开发环境搭建
- java IO之File基本操作
- JVM指令集(指令码、助记符、功能描述)
- 编写高质量代码改善C#程序的157个建议——建议89:在并行方法体中谨慎使用锁
- Python之模块一
- Java算法 -- 顺序表
- selenium三大浏览器driver下载地址
- Ocelot Consul
- 工作中的Buff加成-结构化思考力:自创独门武功 3-3-3原则