思路:
1.初始化时将起点 s 到各个顶点 v 的距离 dist(s->v) 赋值为 ∞,dist(s->s) 赋值为 0;
2.后续进⾏最多 n-1 次遍历操作 (n 为顶点个数), 对所有的边进⾏松弛操作;
所谓的松弛,以边 ab 为例,若 dist(a) 代表起点 s 到达 a 点所需要花费的总数,dist(b) 代表起点 s 到达 b 点所需要花费的总数,weight(ab)代表边 ab 权重,若存在: dist(a) +weight(ab) < dist(b)
则说明存在到 b 的更短的路径,s->...->a->b, 更新 b 点的总花费为 (dist(a) +weight(ab)),⽗节点为 a
3.遍历都结束后,若再进⾏⼀次遍历,还能得到 s 到某些节点更短的路径的话(dist(a) +weight(ab) < dist(b),则图中存在负环路,即是说该图无法求出单源最短路径。否则数组dist[n]中记录的就是源点s到各顶点的最短路径长度),则说明存在负环路。
判断负环就完成循环以后再找⼀次,若还能更新,则
有负环。

方法一:Bellman-ford()
#include<iostream>
#include<algorithm>
#include<cstring>
#include<cmath>
using namespace std;
const int maxx=105;
const int inf=0x3f3f3f3f;
struct node{int u,v,w;
}num[maxx];
int dist[maxx];
int cnt;
int n,m;
int e[maxx][maxx];
void Bellman_ford(int u,int n){for(int i=1;i<=n;i++){dist[i]=inf;}dist[u]=0;int flag=1;while(flag){flag=0;for(int i=1;i<=n;i++){for(int j=1;j<=n;j++){if(e[i][j]!=inf&&dist[j]>dist[i]+e[i][j]){dist[j]=dist[i]+e[i][j];flag=1;}}}if(flag==0)break;}
}
int main(){while(scanf("%d %d",&n,&m)!=EOF){if(n==0&&m==0)break;for(int i=1;i<=n;i++){for(int j=1;j<=n;j++){e[i][j]=inf;}}for(int i=1;i<=m;i++){int u,v,cost;scanf("%d %d %d",&u,&v,&cost);if(e[u][v]>cost){e[u][v]=e[v][u]=cost;}}Bellman_ford(1,n);cout<<dist[n]<<endl;}return 0;
}
方法二:Floyd()算法#include<iostream>
#include<algorithm>
#include<cstring>
#include<cmath>
using namespace std;
const int maxx=105;
const int inf=0x3f3f3f3f;
struct node{int u,v,w;
}num[maxx];
int dist[maxx];
int cnt;
int n,m;
int e[maxx][maxx];
void Floyd(int n){for(int k=1;k<=n;k++){for(int i=1;i<=n;i++){for(int j=1;j<=n;j++){e[i][j]=min(e[i][j],e[i][k]+e[k][j]);}}}
}
int main(){while(scanf("%d %d",&n,&m)!=EOF){if(n==0&&m==0)break;for(int i=1;i<=n;i++){for(int j=1;j<=n;j++){e[i][j]=inf;}}for(int i=1;i<=m;i++){int u,v,cost;scanf("%d %d %d",&u,&v,&cost);if(e[u][v]>cost){e[u][v]=e[v][u]=cost;}}Floyd(n);cout<<e[1][n]<<endl;}return 0;
}

HDU2544(Bellman-ford算法和Floyd算法)相关推荐

  1. 最短路径Dijkstra算法和Floyd算法整理、

    转载自:http://www.cnblogs.com/biyeymyhjob/archive/2012/07/31/2615833.html 最短路径-Dijkstra算法和Floyd算法 Dijks ...

  2. 【Java数据结构与算法】第二十章 Dijkstra算法和Floyd算法

    第二十章 Dijkstra算法和Floyd算法 文章目录 第二十章 Dijkstra算法和Floyd算法 一.Dijkstra算法 1.介绍 2.代码实现 二.Floyd算法 1.介绍 2.代码实现 ...

  3. DP之Warshall算法和Floyd算法

    DP之Warshall算法和Floyd算法 上2篇详细分析了动态规划的一些理解,传统的教材上就大概说了下空间换时间,记忆以避免重复计算等. 然后我们在文章中深入的分析和解释了交叠子问题是怎么表现的,最 ...

  4. 算法设计(动态规划实验报告) 基于动态规划的背包问题、Warshall算法和Floyd算法

    一.名称 动态规划法应用 二.目的 1.掌握动态规划法的基本思想: 2.学会运用动态规划法解决实际设计应用中碰到的问题. 三.要求 1.基于动态规划法思想解决背包问题(递归或自底向上的实现均可): 2 ...

  5. 最短路径(Dijkstra算法和Floyd算法)

    最短路径 ​ 在图中,不可避免要解决的一个问题就是计算两点之间的最短路径,对于图结构来说,两个点之间不一定只有一条路径,那么如何才能找出最短的那一条就是图中最短路径问题.最短路径问题在实际生活中应用十 ...

  6. Dijkstra算法和Floyd算法详解(MATLAB代码)

    一.Dijkstra算法 1.算法简介 Dijkstra算法是由E.W.Dijkstra于1959年提出,又叫迪杰斯特拉算法,它应用了贪心算法模式,是目前公认的最好的求解最短路径的方法.算法解决的是有 ...

  7. 最短路径—Dijkstra算法和Floyd算法

    Dijkstra算法 1.定义概览 Dijkstra(迪杰斯特拉)算法是典型的单源最短路径算法,用于计算一个节点到其他所有节点的最短路径.主要特点是以起始点为中心向外层层扩展,直到扩展到终点为止.Di ...

  8. 最短路径:Dijkstra算法和Floyd算法

    一.Dijkstra算法(单个顶点到其他顶点的最短距离) 定义概览 Dijkstra(迪杰斯特拉)算法是典型的单源最短路径算法,用于计算一个节点到其他所有节点的最短路径.主要特点是以起始点为中心向外层 ...

  9. dijkstra算法和floyd算法(C语言)

    dijkstra算法: /* 邻接表存储 - 无权图的单源最短路算法 *//* dist[]和path[]全部初始化为-1 */ void Unweighted ( LGraph Graph, int ...

最新文章

  1. JSONObject没有fromObject方法(Json lib 库的使用)
  2. 刘政:别着急颠覆传统数据分析人才培养,先将落脚点放在实处
  3. 添加和删除行的能力table(能够编辑的表的内容)
  4. Python 操作Word文档插入图片和表格实例演示
  5. Vue.js(一) Vue.js + element-ui 扫盲
  6. 【类】变量复用,函数复用
  7. 你们觉得很可笑,但是很多人信的,真的很多很多。。
  8. 芋道 spring security oauth2 入门_Spring官方宣布:新的Spring OAuth2.0授权服务器已经来了
  9. PagerSwitch tab样式加上下拉刷新(一)
  10. 【高斯消元】BZOJ3503 [Cqoi2014]和谐矩阵
  11. 3. Ubuntu LAMP 环境搭建
  12. aiml简介+源代码解析+中文分词(java)
  13. 椭球拟合的电子罗盘磁差补偿_NXP传感器融合笔记09(地磁,干扰及校准,椭球拟合)...
  14. Arcface 总结
  15. CSDN日报190910:程序员都秃头,商务个个是人精
  16. 苹果电脑怎么自定义音频输出设备
  17. 王道程序员求职宝典 pdf
  18. Web前端低代码介绍的ppt大纲
  19. 一次服务器上g1回收器发生fullgc的粗浅理解与记录
  20. CTP的交易指令类型

热门文章

  1. PS2019历史记录画笔工具、历史记录艺术画笔工具
  2. Django博客系统(推荐文章数据展示)
  3. 所谓移动IP是指(58);实现移动IP的关键技术是(59)。【答案】D B
  4. 一文读懂CV中的注意力机制
  5. 熬了几个大夜,学完一套985博士总结的「卷积神经网络、目标检测、OpenCV」学习笔记(20G高清/PPT/代码)...
  6. 单镜头视觉系统检测车辆的测距方法
  7. 多摄像头实时目标跟踪和计数,使用YOLOv4,Deep SORT和Flask
  8. centos7.2安装mysql
  9. 整理一下自己手撸的博客
  10. Fastlane实战(一):移动开发自动化之道