Bellman_ford求最短路可以说这个算法在某些地方和dijkstra还是有些相似的,它们的松弛操作基本还是一样的只不过dijkstra以图中每个点为松弛点对其相连接的所有边进行松弛操作

而Bellman_ford就是省去了找松弛点的操作,而是每次将n个点进行m次操作(一共m条边),那么和dijkstra一样的我们进行n次循环即最坏的情况我们要对整个图进行n次松弛(虽然对没有优化的Bell_ford始终都要跑n次),(这篇博客不讲对于Bellman_ford的优化)

Bellman_ford算法和dijkstra算法相差其实并不大,不过是Bellman_ford是以边来进行松弛的就是我们跑n次循环每一遍又进行m次操作对整个图进行松弛那么n次过后我们一定可以保证每一个点的dis值一定是最小的,但我们可以发现这样即使当dis值已经是最小时我们还是要对其操作即使其结果也没有什么变化因此我们就浪费了时间(因为Bellman_ford算法不能像dijkstra那样确定最小的dis值)

Bellman_ford核心代码

void Bellman_ford()
{
for(int k=;k<=n-;k++)//因为最后一次没有必要所以没有必要进行(某些情况例外)
{
for(int i=;i<=m;i++)//松弛操作
{
if(dis[edges[i].to]>dis[edges[i].from]+edges[i].w)
dis[edges[i].to]=dis[edges[i].from]+edges[i].w;
}
}
return;
}

图解:

代码:

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <iomanip>
#include <cstring>
using namespace std;
#define in cin
#define out cout
typedef int insert;
const insert INF=0x3f3f3f3f;
const insert N=1e4+;
insert n,m,startpoint,dis[N];
struct Node
{
insert from,to,w;
}edges[N];
void inital_value()
{
memset(dis,INF,sizeof(dis));
for(int i=;i<=m;i++)
in>>edges[i].from>>edges[i].to>>edges[i].w;
dis[startpoint]=;
} void Bellman_ford()
{
for(int k=;k<=n-;k++)
{
for(int i=;i<=m;i++)
{
if(dis[edges[i].to]>dis[edges[i].from]+edges[i].w)
dis[edges[i].to]=dis[edges[i].from]+edges[i].w;
}
}
return;
} int main()
{
in>>n>>m>>startpoint;
inital_value();
Bellman_ford();
for(int i=;i<=n;i++)
out<<startpoint<<"-->"<<i<<" "<<dis[i]<<endl;
return ;
}

Bellman_ford标准算法的更多相关文章

  1. 用C结构体来实现面向对象编程,ti xDAIS标准算法就这么搞的(1)

    用C结构体来实现面向对象编程,ti xDAIS标准算法就这么搞的. 测试代码如下: #include <stdio.h> #include <stdlib.h> #includ ...

  2. 第 1 章 第 1 题 高级语言的排序问题 C++标准算法实现

    问题分析 依题意,所需程序不用过多考虑效率且暗示使用库,自然想到用高级语言实现(个人选择C++).可用顺序容器暂存数据,用标准算法解决排序问题. 代码实现 #include <iostream& ...

  3. 【计算机视觉】黄金标准算法Gold Standard algorithm

    前言 最近有关于3DMM的内容,博主也只是看了个大概,并没有深入了解算法的实现原理和过程.昨天实习生问关于黄金标准算法的推导,博主也就参考一些资料熟悉了这个算法的实现过程.不太了解使用这个算法的前因后 ...

  4. 偏最小二乘回归(PLSR)- 2 标准算法(NIPALS)

    1 NIPALS 算法 Step1:对原始数据X和Y进行中心化,得到X0和Y0.从Y0中选择一列作为u1,一般选择方差最大的那一列. 注:这是为了后面计算方便,如计算协方差时,对于标准化后的数据,其样 ...

  5. [c++] STL 标准算法

    _if 1 #include <iostream> 2 #include <vector> 3 #include <algorithm> 4 using names ...

  6. [C语言] 数据结构-衡量算法的标准

    1.衡量算法的标准 算法 解题的方法和步骤 衡量算法的标准 1.时间复杂度 大概程序要执行的次数,而非执行的时间,不同的机器运行时间肯定不一样. 2.空间复杂度 算法执行过程中大概所占用的最大内存 3 ...

  7. C++ 泛型算法

    <C++ Primer 4th>读书笔记 标准容器(the standard container)定义了很少的操作.标准库并没有为每种容器类型都定义实现这些操作的成员函数,而是定义了一组泛 ...

  8. STL 简介,标准模板库

    这篇文章是关于C++语言的一个新的扩展--标准模板库的(Standard Template Library),也叫STL.  当我第一次打算写一篇关于STL的文章的时候,我不得不承认我当时低估了这个话 ...

  9. 转载: scikit-learn学习之K-means聚类算法与 Mini Batch K-Means算法

    版权声明:<—— 本文为作者呕心沥血打造,若要转载,请注明出处@http://blog.csdn.net/gamer_gyt <—— 目录(?)[+] ================== ...

随机推荐

  1. Tomcat 启动速度优化

    创建一个web项目 选择发布到 汤姆猫 的下面 deploy path: 表示发布到的文件名称 把项目添加到 tomcat 里,运行,我们可以在 tomcat里找到我们发布的项目: 现在启动时间: 现 ...

  2. EF执行SQL语句

    使用上下文中的Database.SqlQuery<对应的表名>(sql语句) var data = dbcenter.Database.SqlQuery<CcBusiFormview ...

  3. SAP ABAP 日期,时间 相关函数

    获的两个日期之间的分钟数 data min TYPE i. CALL FUNCTION 'DELTA_TIME_DAY_HOUR' EXPORTING T1 = ' T2 = ' D1 = ' D2 ...

  4. Vue报错 [Vue warn]: Cannot find element

    在前端开发全面进入前端的时代 作为一个合格的前端开发工作者 框架是不可或缺的Vue React Anguar 作为前端小白,追随大佬的脚步来到来到博客园,更新现在正在学习的Vue 注 : 相信学习Vu ...

  5. maven-认识

    1.认识maven maven是强大的项目构建工具,也是依赖管理工具 使用maven前提是安装JDK maven非常重要配置文件:setting.xml 3.maven工程 maven工程的约束: 主 ...

  6. ECSHOP和SHOPEX快递单号查询申通插件V8.6专版

    发布ECSHOP说明: ECSHOP快递物流单号查询插件特色 本ECSHOP快递物流单号跟踪插件提供国内外近2000家快递物流订单单号查询服务例如申通快递.顺丰快递.圆通快递.EMS快递.汇通快递.宅 ...

  7. 03 mysql补充 (进阶)

    增加字段 alter table tb1 add age int first; 增加到第一 alter table tb1 add sex int after id; # 改变位置,id是字段名字 a ...

  8. 列表排序之NB三人组附加一个希尔排序

    NB三人组之 快速排序 def partition(li, left, right): tmp = li[left] while left < right: while left < ri ...

  9. go学习笔记-运算符

    运算符 运算符 内置运算符 算术运算符 关系运算符 逻辑运算符 位运算符 赋值运算符 其他运算符 算术运算符 假定 A 值为 10,B 值为 20. 运算符 描述 实例 + 相加 A + B 输出结果 ...

  10. 【Java】关于Spring框架的总结 (一)

    本文总结一些关于Spring框架的理解,注意点及基础操作.如果有不对的地方,欢迎批评和建议.大家一起努力吧! Spring 框架简介 Spring 是一个开源框架,是为了解决企业应用程序开发复杂性而创 ...