algorithm - 什么类型的算法用于多路径但一个起点的寻路?

标签 algorithm graph-theory

我有一张包含一个起点和多个终点的图表。我正在尝试找到一种方法来表达问题以找到要解决的正确算法类型。目标是使用尽可能少的路径到达所有点,但路径必须始终遵循网格点(即直角)。

例如:

Origin:  (0, 0)
Point A: (3, 3)
Point B: (3, 0)
Point C: (1, 3)

从原点 -> C -> A 的路径很棒,因为到达点 A 只需要 2 个额外的线段,因为它能够共享从原点 -> C 的路径。

我想通的一些事情:

  • 穷尽所有点的所有路径选项,然后穷尽所有组合。这显然是蛮力和最慢的方法。不能很好地扩展。
  • 创建从起点到点 _ 的全 1 矩阵,然后执行矩阵加法以找到最高流量 点。然后重新执行某种类型的详尽搜索,优先选择那些遵循高流量路段的路径。

我想做的是绘制从原点到达每个点的“顶部”路径,然后将每条路径与其他路径进行比较,以查看它们可以共享路径的位置。这感觉递归很棘手。

因此,我的问题不是寻找特定问题的答案,而是更多地试图找出解决问题的方法,即在尝试解决问题时应该走哪条路(双关语意)。

总体而言,希望根据(尚无特定顺序)对路径进行评分:

  • 共享的分割数与独特的分割数
  • 转弯次数(首选直线)
  • 最短距离

最佳答案

这看起来不像最小生成树,而是Steiner树,https://en.wikipedia.org/wiki/Steiner_tree_problem特别是直线斯坦纳树。

https://en.wikipedia.org/wiki/Rectilinear_Steiner_tree

不幸的是,这是 NP-hard。

关于algorithm - 什么类型的算法用于多路径但一个起点的寻路?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53280620/

相关文章:

database - 网络统计 : Calculating/estimating unique visitors for arbitary time intervals

php - 将小元素装进大箱子

确定2个图是否同构的算法

java - 实现二次算法

在 GPS 坐标数据库中查找 'hot spots' 的算法

java - 无需递归的 Floyd-Warshall 路径重建

c++ - 拓扑排序

c++ - Djikstra的实现似乎与理论复杂性不符

c - 编辑我的代码以了解输入是否是二叉树

rust - 如何从特征实现中返回 HashMap 键的迭代器?