Bellman-Ford算法


function getCostByPositiveGraph (graph,start) {let cost = {}for(let i in graph){for (let j in graph[start]){if(i === graph[start][j]['target']){cost[i] = graph[start][j]['value']break}else{cost[i] = Infinity}}}delete cost[start]return cost
}function getParentNode (graph,start) {let parent = {}for(let i in graph){for (let j in graph[start]){if(i===graph[start][j]['target']){parent[i]=startbreak;}else{parent[i]='unknown'}}}delete parent[start]return parent
}function findSourceNode(graph,node,start){let arr = []for(let i in graph){if(i===start){continue}for(let j in graph[i]){if(graph[i][j]['target']===node){arr.push({startNode:i,value:graph[i][j]['value']})}}}return arr
}
let graph = {a:[{target:'b',value:6},{target:'c',value:5},{target:'d',value:5}],b:[{target:'e',value:-1}],c:[{target:'b',value:-2},{target:'e',value:1}],d:[{target:'c',value:-2},{target:'f',value:-1}],e:[{target:'g',value:3}],f:[{target:'g',value:3}],g:[]
} //图数据graph = {a:[{target:'b',value:-1},{target:'c',value:4}],b:[{target:'c',value:3},{target:'e',value:2},{target:'d',value:-2}],c:[],d:[{target:'b',value:1}],e:[{target:'d',value:-3}],
} //图数据let start = 'a' //起点位置
let cost = getCostByPositiveGraph (graph,start)
let parent = getParentNode (graph,start)
let graphNodeNum = 0//节点总数
for(let i in graph){graphNodeNum++
}
let nodeCostTotalStr = '' //所有node消费总额
let stepList = []
for(let i = 1 ;i<graphNodeNum;i++){for(let j in cost){let list = findSourceNode(graph,j,start)for(let k in list){let startNode = list[k].startNodelet value = list[k].valueif((cost[startNode]+value)<cost[j]) {cost[j]=cost[startNode]+valueparent[j]=startNode}}}nodeCostTotalStr = ''for(let node in cost){//每次循环的花费总额保存进list中 let value = '0'if(cost[node]!==Infinity){value = cost[node]}nodeCostTotalStr = nodeCostTotalStr + value.toString()}stepList.push(nodeCostTotalStr)console.log(stepList)if((stepList[i-1]===stepList[i-2])&&i!==1){//循环过程中出现重复的cost表 ==> 即cost表不再更新 ==> 结束循环并得出结果break;}else{//负权环判断 ==> 循环次数已经超过V-1 但仍有更新cost表if(i===graphNodeNum-1){console.log('无解,因为存在负权环')break;}}
}
console.log(cost,parent)

最短路径之Bellman-Ford相关推荐

  1. c语言bellman算法,求 最短路径中BELLMAN FORD算法实现的C程序

    匿名用户 1级 2010-06-01 回答 //这个是邻接表 typedef struct oo { int len,num; struct oo *next; } link; typedef str ...

  2. C++实现bellman ford贝尔曼-福特算法(最短路径)(附完整源码)

    C++实现bellman ford贝尔曼-福特算法 实现bellman ford贝尔曼-福特算法的完整源码(定义,实现,main函数测试) 实现bellman ford贝尔曼-福特算法的完整源码(定义 ...

  3. bellman ford 算法 判断是否存在负环

    Flyer 目录视图 摘要视图 订阅 微信小程序实战项目--点餐系统        程序员11月书讯,评论得书啦        Get IT技能知识库,50个领域一键直达 关闭 bellman for ...

  4. SPFA or bellman ford松弛法--单源最短路

    问题概述:有编号1-n的n个站点,有m条公交车路线,公交车只从一个起点站直接到达终点站,是单向的且每条路线有它自己的车费,有P个人早上从1出发,他们要到达每一个公交站点,然后到了晚上再返回点1,求所有 ...

  5. Bellman——Ford算法

    Bellman--Ford 算法介绍 思路讲解 案例分析与代码实现 案例分析 代码实现 优先队列优化(SPFA) 优化原理 代码实现 算法介绍 我们知道Dijkstra算法只能用来解决正权图的单源最短 ...

  6. Bellman Ford算法详解

    一.用途 1. Bellman Ford算法是解决拥有负权边最短路问题的方法之一.还有一种方法是SPFA算法. 2. 二者相比,SPFA算法在效率方面是优于Bellman Ford算法的.但在某些情况 ...

  7. 图解Bellman Ford算法

    Bellman Ford 单源最短路径算法[中字] Bellman Ford 单源最短路径算法[中字]_哔哩哔哩_bilibili 贝尔曼-福特算法(Bellman–Ford algorithm )油 ...

  8. LeetCode 787. K 站中转内最便宜的航班(图/Bellman Ford算法)

    文章目录 贝尔曼-福特算法(Bellman-Ford) 简介 算法思想 算法执行过程 应用 题目描述 分析 代码 LeetCode 787. K 站中转内最便宜的航班 题目描述 Bellman For ...

  9. Bellman ford算法(贝尔曼·福特算法)

    Bellman - ford算法是求含负权图的单源最短路径的一种算法,效率较低,代码难度较小.其原理为连续进行松弛,在每次松弛时把每条边都更新一下,若在n-1次松弛后还能更新,则说明图中有负环,因此无 ...

  10. bellman - ford算法c++

    (最短路III)bellman - ford算法(适用于含负权边的图) 注意:用该算法求最短路,在有边数限制的情况下可以存在负权回路!且对所走的边的数量有要求时只能用该算法实现! 解析:因为如果没有边 ...

最新文章

  1. Oracle内部错误ORA-07445:[_memcmp()+88] [SIGSEGV]一例
  2. FFmpeg源代码:avcodec_send_packet
  3. 《Mali OpenCL SDK v1.1.0》教程样例之一“Hello World”
  4. 《软件需求分析(第二版)》第 10 章——编写需求文档 重点部分总结
  5. C++仿Java反射机中字符串创建类的思想,初步实现
  6. Centos系统查看版本
  7. [李景山php]每天TP5-20161205|Loader.php-3
  8. 测试用例设计技术之一等价类法
  9. 哲学家晚餐问题的Haskell求解
  10. jpeg-turbo源码下载及使用NDK编译android库
  11. RFID电力设备智能巡检管理解决方案
  12. 为什么是“深度”学习而不是宽度?
  13. 解决Win键不能用的问题
  14. ubuntu20.04合并拆分pdf
  15. CSS媒体查询(@media)全面解析
  16. c# Environment.GetCommandLineArgs
  17. excel 第12讲:vlookup函数和 macth与index函数
  18. 计算机怎么看事件管理,用事件查看器查看电脑使用记录
  19. JavaScript在线手册
  20. w10取消自带杀毒服务器,如何关闭win10自带杀毒软件 Windows Defender 看完你就知道了...

热门文章

  1. 买服务器挂网站吗,云服务器 挂网站吗
  2. python爬虫从企查查获取企业信息-手工绕开企查查的登录验证
  3. 微信支付 postman_微信刷脸支付补贴政策有哪些?
  4. 拯救脂肪肝第一步!以飞桨3D医疗影像分割方案MedicalSeg自主诊断脂肪肝
  5. 【报告分享】2021年小红书内容营销趋势洞察-千瓜(附下载)
  6. 处理tree 树状结构,
  7. 计算机评游戏图形低,5常见的PC游戏图形选项说明 | MOS86
  8. Zig-Zag模式填充矩阵
  9. webservice概述及cxf在Java开发中应用(三) cxf客户端开发
  10. C语言—求数组的对角线和副对角线之和