I';我试图在java中使用递归自顶向下DP实现TSP。逻辑是正确的,但答案不同

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){

尝试用动态规划求解旅行商问题。代码是无错误的,但输出不是它应该是的。我注意到递归返回的答案并没有加在一起成为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){
        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
,则可能需要在循环函数之外定义它。。。