I';我试图在java中使用递归自顶向下DP实现TSP。逻辑是正确的,但答案不同
尝试用动态规划求解旅行商问题。代码是无错误的,但输出不是它应该是的。我注意到递归返回的答案并没有加在一起成为newAns,奇怪到让我无法理解。 在此部分的任何帮助都将不胜感激I';我试图在java中使用递归自顶向下DP实现TSP。逻辑是正确的,但答案不同,java,dynamic-programming,Java,Dynamic Programming,尝试用动态规划求解旅行商问题。代码是无错误的,但输出不是它应该是的。我注意到递归返回的答案并没有加在一起成为newAns,奇怪到让我无法理解。 在此部分的任何帮助都将不胜感激 public class TravellingSalesman { int ans = Integer.MAX_VALUE; static int[][] dp = new int[16][4]; int tsp(int[][] graph, int n, int mask, int pos){
public class TravellingSalesman {
int ans = Integer.MAX_VALUE;
static int[][] dp = new int[16][4];
int tsp(int[][] graph, int n, int mask, int pos){
int Visited_All = (1 << n) - 1;
if (mask == Visited_All)
return graph[pos][0];
if(dp[mask][pos]!=-1)
return dp[mask][pos];
// unvisited cities
for(int city = 0; city < n; city++){
if ((mask & (1<<city)) == 0){
int newAns = 0;
newAns += (graph[pos][city] + tsp( graph,n,mask|(1<<city), city));
ans = Math.min(ans, newAns);
}
}
return dp[mask][pos] = ans;
}
public static void main(String[] args) {
int[][] graph =
{
{0,20,42,25},
{20,0,30,34},
{42,30,0,10},
{25,34,10,0}
};
int n = 4;
for(int i=0; i<(1<<n); i++){
for(int j=0; j<n; j++){
dp[i][j] = -1;
}
}
TravellingSalesman ts = new TravellingSalesman();
System.out.println(ts.tsp(graph,n,1,0));
}
}
公共类旅行推销员{
int ans=整数最大值;
静态int[]dp=新int[16][4];
int tsp(int[][]图形、int n、int掩码、int pos){
int visted_All=(1看起来newAns
没有全局作用域,每次调用tsp()
时设置为0
,可能需要在循环函数之外定义它…看起来newAns
没有全局作用域,每次tsp()如果调用的
设置为0
,则可能需要在循环函数之外定义它。。。