2017-07-27  08:58:08

writer:pprp

参考书目:张新华的《算法竞赛宝典》

Bellman-Ford算法是求有向图单源最短路径的,dijkstra算法的条件是图中任意一条边的权都是正的;BF算法可以解决存在负边权的图;

算法流程分为三个部分:

  1. 初始化,将除源点外的所有顶点的最短距离的估计值D[i] = +无穷,D[sourse] = 0;
  2. 迭代求解:反复对每条边进行松弛操作,使得每个顶点的最短距离D[i]估计值主讲逼近其最短距离;运行n-1次
  3. 检验负权回路:通过松弛操作判断每一条边的两个端点是否收敛。如果存在未收敛的顶点,则算法返回FALSE表名问题无解;否则返TRUE,输出D[i]的值

例题:虫洞

代码如下:

#include <iostream>using namespace std;int w[1001][1001],d[1001];
int n,m;     //n 是点的个数, m是边的个数
int change; //?void init()
{cin >> n >> m;int x,y,v;for(int i = 1; i <= n ; i++)for(int j = 1; j <=n; j++)w[i][j] = INT_MAX;for(int i = 1; i <= m; i++){cin >> x >> y >> v;w[x][y] = v;//单向通道,边的权值为v
    }
}void bellman_ford(int x)
{int i,j,k;for(i=1; i<=n; i++)     //initial array dd[i] = w[x][i];d[x] = 0;  //到自己距离为0for(k=1; k<=n-1; k++)for(j = 1; j >=n ; j++)   //松弛for(i = 1; i <=n ; i++)if((w[i][j]!=INT_MAX)&&d[i]!=INT_MAX&&d[j]>d[i]+w[i][j])d[j] = d[i]+w[i][j];change = 1;for(i =1; i<=n; i++)   //松弛操作判断是否存在负权回路for(j=1; j<=n; j++)if(w[i][j]!=INT_MAX&&d[i]!=INT_MAX&&d[j]>d[i]+w[i][j])change = 0;if(change)cout <<"Not possoble"<<endl;elsecout <<"Possible"<<endl;
}int main()
{init();bellman_ford(1);return 0;
}

转载于:https://www.cnblogs.com/pprp/p/7242966.html

Bellman-Ford算法 - 有向图单源最短路径相关推荐

  1. Dijkstra算法求单源最短路径

    1.最短路径 在一个连通图中,从一个顶点到另一个顶点间可能存在多条路径,而每条路径的边数并不一定相同.如果是一个带权图,那么路径长度为路径上各边的权值的总和.两个顶点间路径长度最短的那条路径称为两个顶 ...

  2. 图的基本算法(单源最短路径)

    在许多路由问题中,寻找图中一个顶点到另一个顶点的最短路径或最小带权路径是非常重要的提炼过程.正式表述为,给定一个带权有向图G = (V, E) , 顶点s到v中顶点t的最短路径为在边集E中连接s到t代 ...

  3. 【算法】单源最短路径和任意两点最短路径总结(补增:SPFA)

    [Bellman-Ford算法] [算法]Bellman-Ford算法(单源最短路径问题)(判断负圈) 结构: #define MAX_V 10000 #define MAX_E 50000 int ...

  4. 51nod 1445 变色DNA ( Bellman-Ford算法求单源最短路径)

    1445 变色DNA 基准时间限制:1 秒 空间限制:131072 KB 分值: 40 难度:4级算法题 有一只特别的狼,它在每个夜晚会进行变色,研究发现它可以变成N种颜色之一,将这些颜色标号为0,1 ...

  5. dijkstra算法PHP,单源最短路径(dijkstra算法)php实现

    做一个医学项目,其中在病例评分时会用到单源最短路径的算法.单源最短路径的dijkstra算法的思路如下: 如果存在一条从i到j的最短路径(Vi.....Vk,Vj),Vk是Vj前面的一顶点.那么(Vi ...

  6. Dijkstra(迪杰斯特拉)算法求单源最短路径问题

    Dijkstra(迪杰斯特拉)算法求单源最短路径问题 重要的事情说三遍:代码不是我写的!代码不是我写的!代码不是我写的! 第一个算法是严蔚敏数据结构(C语言版)上写的,第二个算法是王道数据结构上写的, ...

  7. 【2023王道数据结构】【图】通过C++实现图的BFS(广度优先遍历)算法求单源最短路径问题C、C++完整实现(可直接运行)

    ~~~笔锋至此又怎能平淡而终,故事开始便不承认普通✌✌✌ ✌ 题目及题解持续更新中 [2023王道数据结构目录]课后算法设计题C.C++代码实现完整版大全 题目: 通过C++实现图的BFS(广度优先遍 ...

  8. java 有向图 最短路径算法_java使用Dijkstra算法实现单源最短路径

    单源最短路径问题,即在图中求出给定顶点到其它任一顶点的最短路径.在弄清楚如何求算单源最短路径问题之前,必须弄清楚最短路径的最优子结构性质. 一.最短路径的最优子结构性质 该性质描述为:如果P(i,j) ...

  9. 【算法】【ACM】深入理解Dijkstra算法(单源最短路径算法)

    Dijkstra算法是用来求解从某个源点到其他各顶点的最短路径(单源最短路径). 下面的Dijkstra算法的讲解都是基于这个有向图,在遇到其他问题可以类比. 算法的基本思想: 把图中的定点分成两组, ...

  10. Dijkstra算法求解单源最短路径问题

    文章目录 一 前言 二 Dijkstra 算法讲解 1. 贪心算法的证明 2. 算法实现说明 3. 初版Dijkstra算法代码 三 时间复杂度优化 1. 优化策略 2. 优化后的代码 四 结语 一 ...

最新文章

  1. eyoucms的添加内容发布
  2. 深度学习(三)转-可视化理解卷积神经网络 直接查看卷积神经网络的过程特征...
  3. wince下Gpio 驱动程序
  4. mysql 报错 Specified key was too long; max key length is 767 bytes,开启系统变量:innodb_large_prefix
  5. 【NOIP2004】【Luogu1088】火星人(枚举排列)
  6. 【Redis】Redis 使用 redisson 做分布式锁 复盘 maven 依赖 netty 冲突
  7. mysql将一个表的字段更新到另一个表中
  8. python的zip函数_python的zip函数
  9. 摄动(Perturbation)
  10. Rotate List leetcode
  11. 【hihocoder 1554】最短的 Nore0061
  12. android 远程控制工具,安卓版远程协助软件
  13. java操作cad_java调用AutoCAD绘图
  14. Burp新手抓包教程(HTTPS抓包)
  15. 社招的我,在酷家乐的野蛮生长
  16. python爬虫,爬取贝壳网数据简单案例
  17. 2021湖北技能高考成绩时间查询,2020湖北技能高考成绩查询时间
  18. 【经验篇】记如何排查Linux服务器CPU使用率过高的问题
  19. tcpdump提取源IP
  20. DB2控制中心菜单中文乱码问题

热门文章

  1. CSS详解(二)——CSS连接方式、CSS分裂与CSS分裂检测
  2. 【大数据】Azkaban学习笔记
  3. 好好活着就是一场博弈
  4. 使用nightwatch进行E2E测试中文教程
  5. dup,dup2函数【转】
  6. 使用脚本开启客户端远程桌面
  7. cpu高 rust腐蚀_木器漆如何选购,Rust-Oleum户外防水防腐木器漆怎么样?
  8. 腾讯云dts使用注意事项
  9. man services时“没有services的手册页条目”→Centos 安装man帮助文档包
  10. 分解例题_2020年中考数学考点之利用平方差公式进行因式分解习题练习