【问题标题】:Implementation of a particular Travelling-Salesman variation特定旅行推销员变体的实现
【发布时间】:2014-09-17 09:09:05
【问题描述】:

我正在寻找一种算法(C/C++/Java - 没关系),它将解决一个问题,该问题包括找到图的 2 个节点(A 和 B)之间的最短路径。问题是路径必须访问某些其他给定的节点(城市)。 一个城市可以多次访问。路径示例(A-HDCE-F-G-F-B)(其中 A 是来源,B 是目的地,F 和 G 是必须访问的城市)。

我认为这是旅行商问题的一种变体,但我无法根据我的搜索找到或编写有效的算法。

我试图从这些主题开始寻找解决方案,但没有任何运气: https://stackoverflow.com/questions/24856875/tsp-branch-and-bound-implementation-in-cVariation of TSP which visits multiple cities

【问题讨论】:

    标签: java c++ algorithm traveling-salesman


    【解决方案1】:

    将问题简化为 TSP 的方法是:

    1. 对于每个“必须访问”的(u,v),找出它们之间的距离d(u,v)。这可以有效地使用Floyd-Warshall Algorithm 来找到所有最短路径。
    2. 创建一个仅由这些节点组成的新图 G',所有边都存在,距离根据 (1) 计算得出。
    3. 运行标准 TSP 算法以解决简化图上的问题。

    【讨论】:

    • 嗯,这可能是一个很好的解决方案。不过,我不确定第 3 步,因为每个节点都可以访问多次,而标准 TSP 算法只能访问一次。也许我错了,它实际上给出了最短路径,我必须编写实现来检查,谢谢!
    【解决方案2】:

    我认为,除了阿米特的回答之外,您还需要将具有 A 或 B 作为端点的边的成本增加足够的量(图的总成本 + 1 可能就足够了)以确保你不会得到一条通过 A 或 B 的路径(而不是在 A 和 B 处结束)。

    A--10--X--0--B
    |      |     |
    |      10    |
    |      |     |
    +---0--Y--0--+
    

    上述情况将导致从 A 到 Y 到 B 到 X 的路径,除非您增加 A 和 B 边的成本(增加 21)。

    A--31--X--21--B
    |      |      |
    |      10     |
    |      |      |
    +---21--Y--21-+
    

    现在它从 A 到 X 到 Y 到 B。 还要确保删除所有边缘 (A,B)(如果存在)。

    【讨论】:

      猜你喜欢
      • 2015-08-14
      • 2016-04-22
      • 1970-01-01
      • 2011-09-08
      • 1970-01-01
      • 2015-04-28
      • 1970-01-01
      • 1970-01-01
      • 2017-11-11
      相关资源
      最近更新 更多