Java 中的旅行商问题

2025 年 5 月 6 日 | 阅读 3 分钟

在 Java 中,旅行商问题是指我们需要找到一条经过每个城市恰好一次并返回起点的最短路线。汉密尔顿回路是 Java 中另一个与旅行商问题非常相似的问题。

TSP 和汉密尔顿回路之间的主要区别在于,在汉密尔顿回路中,我们不确定是否存在一条访问每个城市恰好一次的回路,并且我们需要确定它。在旅行商问题中,由于图是完全图,因此始终存在一个汉密尔顿回路,问题在于找到具有最小权重的汉密尔顿回路。

让我们以旅行商问题为例来理解这个问题。

Travelling Salesman Problem in Java

在上图中,a, b, c, d, e, f,g 是城市,我们需要找到具有最小权重的汉密尔顿回路。有几条汉密尔顿回路,其中一些如下:

  1. a -> b -> c -> d -> e -> f-> g -> a
  2. a -> c -> b -> d -> e -> f -> g -> a
  3. a -> g -> c -> e -> f-> d -> b -> a

每个汉密尔顿回路的权重可能不同,现在我们的任务是找到那条距离最短的路线。

实现旅行商问题的步骤

以下是我们在 Java 中实现 TSP 程序的步骤:

  1. 我们将一个城市视为起点和终点。由于路线是循环的,我们可以选择任何城市作为起点。
  2. 以 DFS 的方式,我们开始从源节点遍历到其相邻节点。
  3. 计算每次遍历的成本,并跟踪最小成本,同时不断更新存储的最小成本值。
  4. 最后,返回具有最小成本的排列。

让我们通过上述步骤来实现 TSP 的 Java 代码

TSPExample.java

输出

Travelling Salesman Problem in Java
Travelling Salesman Problem in Java