旅行商的递归动态规划方法

时间:2013-04-23 04:33:44

标签: c++ algorithm recursion dynamic-programming

我希望有人可以解释此页面上的代码是如何运作的:TSP-Recursive

伪代码难以解释,动态编程方法使其特别难以理解。为什么需要移位?如何推广这种方法(例如,给定位置坐标,我们能否采用这种方法来解决这个问题)?

2 个答案:

答案 0 :(得分:2)

位移是因为代码使用int来表示集合,特别是访问过的城市集合。如果你有32位整数,那么int可以代表一组最多32项。

基本操作是

// add n to set
set |= 1 << n;

// remove n from set
set &= ~(1 << n);

// test set for n
if ((set&(1 << n)) != 0)
    ...

答案 1 :(得分:2)

变量graph是一个地图(在数学意义上)。给定两个城市A和B,graph[A][B]是从A到B的距离。

变量dp是另一张地图。给定城市 S 和城市A,dp[S][A]是访问 S 中每个城市的最短旅程,并以甲

填写graph并选择最终城市后,init函数会填充dp中的某些距离:对于每个城市A,最短的旅程开始在A和仅访问B显然只是graph[A][B]

函数TSP( S, X )给出了访问 S 中每个城市并以X结尾的最短旅程的长度。如果该距离已经列在dp中,则返回该距离。否则,对于 S 中的每个城市A,计算在 S 中访问每个其他城市的最短行程的长度,然后计算A,然后是X最短的是答案,因此函数将其记录在dp中并返回它。