虽然可能不是最佳算法,但可以使用A*算法。
你需要离开城市和它们之间的道路的图表。相反,定义一个有向图,其中部分路径是节点,当且仅当通过在原始城市图中添加单个“步骤”可以从x构建y时,两个节点x和y相连。起始节点是空路径。目标节点是经过所有城市的路径。(启发式和A*算法本身的属性保证了这条路径的最优性。)
[编辑:起初我认为路径应该是一个有序的城市列表,但现在我相信@spinning_plate的建议,用一对(长度,城市集合)表示路径就足够了。]
路径成本是旅行的总距离。启发式估计必须是总体最小旅行长度的某个可接受估计值(通常是低估)。这样的估计值的一个很好的候选者可能是TSP的快速近似(放松问题的解决方案)。您将为每个节点(部分路径)在尚未覆盖的城市集上运行近似算法。这为算法提供了销售员仍需前往的距离的必要上限。
A*算法是Dijkstra算法的扩展,它考虑了遍历有向图的最优解。我不确定这是否适用于TSP问题。
TSP问题指的是您希望在恰好访问每个目的地一次的情况下最小化旅行距离。A*算法需要启发式来引导其前进,其中已知最优解为直线(您必须小心A*启发式,以免高估到达目标的距离)。这不适用于TSP问题。
此问题还包含有关A*算法和TSP问题的信息。