【发布时间】:2014-12-26 06:36:45
【问题描述】:
我正在学习 TSP,发现了这个 TSP 的递归解决方案
int compute(int start,int set)
{ int masked,mask,result=INT_MAX,temp,i;//result stores the minimum
if(g[start][set]!=-1)//memoization DP top-down,check for repeated subproblem
return g[start][set];
for(i=0;i<n;i++)
{ //npow-1 because we always exclude "home" vertex from our set
mask=(npow-1)-(1<<i);//remove ith vertex from this set
masked=set&mask;
if(masked!=set)//in case same set is generated(because ith vertex was not present in the set hence we get the same set on removal) eg 12&13=12
{
temp=adj[start][i]+compute(i,masked);//compute the removed set
if(temp<result)
result=temp,p[start][set]=i;//removing ith vertex gave us minimum
}
}
return g[start][set]=result;//return minimum
}
我不明白屏蔽是如何工作的,如何在不使用递归的情况下将其更改为动态编程解决方案,请帮助我。
【问题讨论】:
-
这已经是自上而下的动态规划方案了,要改成自下而上的形式吗?
-
@PhamTrung 你能解释一下吗!!!请
-
嗯,有什么不明白的?动态规划还是位掩码?
-
mask=(npow-1)-(1<<i), ` masked=set&mask;`if(masked!=set)为什么这些行 -
如何让它不递归,请帮忙
标签: c++ algorithm traveling-salesman