C++ 旅行商的递推动态规划方法
我希望有人能解释一下这个页面上的代码是如何工作的:C++ 旅行商的递推动态规划方法,c++,algorithm,recursion,dynamic-programming,C++,Algorithm,Recursion,Dynamic Programming,我希望有人能解释一下这个页面上的代码是如何工作的: 伪代码很难解释,而动态规划方法使其特别难以理解。为什么需要位移位?该方法如何推广(例如,给定位置坐标,我们是否可以调整该方法以解决该问题)?位移位是因为代码使用int表示一个集合,特别是访问城市的集合。如果您有32位整数,则int可以表示一组最多32项 基本操作是 // add n to set set |= 1 << n; // remove n from set set &= ~(1 << n); //
伪代码很难解释,而动态规划方法使其特别难以理解。为什么需要位移位?该方法如何推广(例如,给定位置坐标,我们是否可以调整该方法以解决该问题)?位移位是因为代码使用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)
...
//将n添加到集合
set |=1变量graph
是一个映射(在数学意义上)。给定两个城市A和B,图[A][B]
是A到B的距离
变量dp
是另一个映射。给定一组城市和一个城市a,dp[S][a]
是访问S中每个城市并以a结束的最短行程
一旦填写了graph
并选择了最终的城市,函数init
将填写dp
中的一些距离:对于每个城市A,从A开始只访问B的最短行程显然就是graph[A][B]
函数TSP(S,X)
给出访问S中每个城市的最短行程长度,并在X处结束。如果该距离已在dp
中列出,则返回该距离。否则,对于S中的每个城市A,计算访问S中每个其他城市的最短行程长度,然后是A,然后是X。其中最短的是答案,因此函数将其记录在dp
中并返回。我强烈建议您参加topcoder SRM竞赛(www.topcoder.com/tc),这种问题在那里很常见