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. HDU1214 圆桌会议(找规律,数学)

    传送门: http://acm.hdu.edu.cn/showproblem.php?pid=1214 圆桌会议 Time Limit: 2000/1000 MS (Java/Others)    M ...

  2. js 3秒后跳转页面的实现代码

    隔多少秒后自动跳转到其它页(js脚本) 方法一: $(function(){ Load(URL); }) var secs = 3; //倒计时的秒数 var URL = "<?= u ...

  3. Centos安装VMware

    转载:http://www.mamicode.com/info-detail-2171464.html

  4. nineoldandroid 详细使用并且实现drawerlayout侧滑动画

    nineoldandroid.view.ViewHelpe是一个为了兼容3.0以下的一个动画开源库 相关函数解读:(第一个参数都为动画对象,第二个为动画属性值的变化表达式) ViewHelper.se ...

  5. CRS

    CRS是集群就绪服务(cluster ready service)的简称,主要负责集群中的资源管理以及OCR管理.为了与10gR2集群管理软件名称crs区分,这里用CRSD代替CRS.相关概念:--资 ...

  6. jmeter 填写URL链接后 不能有多余的空格。

  7. Javascript中的内存泄漏

    最新博客站点:欢迎来访 一.内存泄漏        由于某些原因不再需要的内存没有被操作系统或则空闲内存池回收.编程语言中有多种管理内存的方式.这些方式从不同程度上会减少内存泄漏的几率,高级语言嵌入了 ...

  8. 实践笔记-VA05 销售订单清单 增加字段

    现在都自开发很多报表 ,估计没有多少人 用  VA05 1.在结构 VBMTVZ 中增加需要的字段 2.表t180a 中  添加一条 “添加字段”的数据,如下: 3.取值 修改程序 INCLUDE V ...

  9. Spring Boot多环境配置

    在项目开发阶段,开发环境和实际生产环境是不一样,比如使用的数据库/服务连接配置等.因此,配置多个开发环境profile还是必要的 多环境的配置(yml)方式 配置其实很简单,在resource目录下, ...

  10. 【ospf-基础配置】

    ospf开放最短路径优先基本配置{ ospf cost :配置ospf接口的优先级 ospf dr-priority :配置路径花费值 ospf router_id:创建ospf的进程号 area a ...