首页 > 编程语言 >Bellman-ford算法

Bellman-ford算法

时间:2022-11-14 20:00:52浏览次数:44  
标签:dist 所有 更新 ford 算法 循环 距离 Bellman

适用于存在负权边,题目要求最短路不超过k条边,还可以检测是否存在回路

核心思想是 松弛操作(枚举所有边)

首先n次迭代,每一次循环所有边。我们这里用a,b,w表示存在一条从a走到b的边,权重是w。这里存边方式有很多种,可以用邻接表,结构体等。遍历所有边的时候更新一下其他点的距离,和Dijkstra算法类似,用当前这个点更新和它相连的点距离起点的距离。我们这里用dist数组表示每个点到起点的距离,那么更新操作就是dist[b]=min(dist[b],dist[a]+w),这样就可以更新和a相连的b点距离起点的距离,这个更新的过程就是”松弛操作”。忘了说的一点就是在循环所有边的时候,每一次循环要先把dist数组备份一下,防止串联,循环n次之后对所有的边一定满足dist[b]<=dist[a]+w,这个叫”三角不等式“

但是注意如果图中有负权回路的话,最短路就不一定存在了

、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、

 

 

、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、

 

标签:dist,所有,更新,ford,算法,循环,距离,Bellman
From: https://www.cnblogs.com/-Rebecca/p/16890186.html

相关文章

  • 【数据结构/C语言】编写实现这个双向栈tws的入栈操作Push(&tws, i ,e)和出栈操作的算
    假设以顺序存储结构实现一个双向栈,即在一维数组的存储空间中存在两个栈,它们的栈底分别设在数组的两个端点,栈顶指针分别指示栈顶元素的下一存储单元。试编写实现这个双向栈t......
  • 【数据结构/C语言】编写循环顺序队列结构相应的入队和出队算法
    如果希望循环顺序队列中的存储空间都能得到利用,可设置一个标志域变量tag,并以tag的值为0或1来区分队头指针和队尾指针相等时的队列状态是“空”还是“满”。试编写此结构相......
  • 【数据结构/C语言】试给出此循环队列的队满条件,并写出相应的入队和出队操作的算法
    假设将循环顺序队列定义为:以域变量rear和length分别指示循环顺序队列中队尾元素的位置和内含元素的个数,试给出此循环队列的队满条件,并写出相应的入队和出队操作的算法。提......
  • letcode算法--19.最大子数组和
    给你一个整数数组 nums ,请你找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。子数组 是数组中的一个连续部分。方法一:动态规划classSolution......
  • 强化学习代码实战-06 Dueling DQN 算法
    引入优势函数A,优势函数A=状态动作价值函数Q-状态价值函数V。在同一状态下,所有动作的优势值为零。因为,所有的动作的状态动作价值的期望就是状态价值。实现代码:impor......
  • 哈希算法
    hash函数,通常用于将字符串映射到整数的函数,一般将值域映射到1e9或1e18以内,尽量避免哈希冲突并且便于比较。选取哈希进制base和模数mod,尽量选取质数,对于一个字符串s的哈希......
  • Tarjan算法
    tarjan求无向图割点,若x是根节点,则子树个数>1时x时割点;若x是非根节点,当ipt[x]<=low[y]时x是割点,说明y的子树无法通过非父子边回溯到x的祖先,那么删掉x,图将分裂成两个字图,即x......
  • 代码随想录训练营第三十二天|贪心算法
    本来这是第三十一天的内容,但是三十一天的时候写成第三十二天的了,因此今天写第三十一天的内容 455.分发饼干 classSolution{publicintfindContentChildre......
  • AI基础:优化算法
    导语在学习机器学习的过程中我们发现,大部分的机器学习算法的本质都是建立优化模型,通过最优化方法对目标函数(或损失函数)进行优化,从而训练出最好的模型,梯度下降是最基本的优......
  • 爱上算法,迷人的两度搜索
    迷人的两度搜索1、BFS和DFS深度优先搜索算法(DFS)和广度优先搜索算法(BFS)是一种用于遍历或搜索树或图的算法,在搜索遍历的过程中保证每个节点(顶点)访问一次且仅访问一次,按照节......