java - 如何使用 bfs 和 java 中的路由表在图中绘制最安全的路由

标签 java algorithm search path routes

我有一个包含资源水平的节点图,它们可以是正的也可以是负的,原理是一只雌鸟或一些物体从每个节点获得生命或被一个节点伤害。

我已经设法用队列结构实现 BFS:-

给定一个没有节点资源的图

  a---b---e
  |       |
  c---d   f

路由表是:-

node    parent
===============
a       null
b       a
c       a
d       c
e       b
f       e

因此路线是使用父节点绘制的,假设 (a) 是起始节点,(f) 是导出节点 最快的路线是从底部 f-e-b-a

我在 Java 代码中解决了这个问题,问题是如何在每个节点上使用这个方法,每个节点都有可以杀死你或给你生命的资源。

所以说一些节点有 -20 而其他节点有 +10

鉴于我使用的队列结构,我不确定如何确定路由。

有没有人有什么想法?

我不一定需要 Java 代码,但是任何东西都会有所帮助,我真的对解决方案的理论以及可以使用的数据结构等感兴趣...

我的想法是可能

child  parent  resource
=======================
a       b       20+
b       a       10-
c       b       5+

问题是我不确定如何存储不同的路线,该表只存储一条路线。

最佳答案

当所有边的长度都不相同时,BFS 并不真正用于寻找最短路径。我建议 Bellman Ford Algorithm .与 Dijkstra 算法一样,它用于计算给定图形的最短路径。但是,与 Dijkstra 的算法不同,它允许您对并非所有边长都为正的图形进行操作(看来您已经提出了问题)。

这是一个 video解释它(通过 OpenCourseWare)。

关于java - 如何使用 bfs 和 java 中的路由表在图中绘制最安全的路由,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10269654/

相关文章:

algorithm - 哪些 ML 算法或模式适合识别内容的类别和子类别?

algorithm - 什么是压缩被阻止文件中记录的好算法?

jquery - 按一列无索引或两列其中一列有索引进行搜索

java - 如何垂直扩展 ActiveMQ?

java - 如何编辑/加载 Eclipse 插件

algorithm - 多 channel 格递归最小二乘法

matlab - 加载文件只知道名称的开头

java - 按属性匹配两个无序流,RxJava,RxAndroid

java - 比较 Struts2 中的字符串 <s :if> Tag

php - Laravel - 检索以 "X"开头的条目