我希望有人可以解释此页面上的代码是如何运作的:TSP-Recursive
伪代码难以解释,动态编程方法使其特别难以理解。为什么需要移位?如何推广这种方法(例如,给定位置坐标,我们能否采用这种方法来解决这个问题)?
答案 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
中并返回它。