【问题标题】:Recursive dynamic programming approach for the travelling salesman [closed]旅行商的递归动态规划方法[关闭]
【发布时间】:2013-04-23 04:33:44
【问题描述】:

我希望有人能解释这个页面上的代码是如何工作的:TSP-Recursive

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

【问题讨论】:

  • 我强烈推荐你参加topcoder SRM比赛(www.topcoder.com/tc),这种问题在那儿很常见

标签: c++ algorithm recursion dynamic-programming


【解决方案1】:

移位是因为代码使用 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)
    ...

【讨论】:

    【解决方案2】:

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

    变量dp 是另一个映射。给定 一组城市 S 和一个城市 A,dp[S][A] 是访问 S 中每个城市并在 A 结束的最短旅程。

    填写graph并选择最终城市后,函数init会填写dp中的一些距离:对于每个城市A,从A开始到B的最短路程显然只是graph[A][B]

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

    【讨论】:

      猜你喜欢
      • 2013-12-19
      • 2014-05-22
      • 2021-07-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-26
      • 2013-11-14
      相关资源
      最近更新 更多