Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/335.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 求矩阵中路径数的递归方法_Java_Recursion_Path - Fatal编程技术网

Java 求矩阵中路径数的递归方法

Java 求矩阵中路径数的递归方法,java,recursion,path,Java,Recursion,Path,我写了一个方法,计算从二维数组中给定单元格到给定目标单元格的路径数,但由于某种原因,它返回了一个错误的答案,有什么想法吗 private static int numParths(int [][] mat, int x1, int y1, int x2, int y2) { if(x1<0 || x1 >mat.length-1 || y1<0 || y1>mat.length-1) return 0;

我写了一个方法,计算从二维数组中给定单元格到给定目标单元格的路径数,但由于某种原因,它返回了一个错误的答案,有什么想法吗

   private static int numParths(int [][] mat, int x1, int y1, int x2, int y2)
    {
        if(x1<0  ||  x1 >mat.length-1 || y1<0  ||  y1>mat.length-1)
          return 0;


        if(x1 == x2 && y1 == y2){
        System.out.println("1"); 
          return 1;
        }


        if(mat[x1][y1]==-1)
          return 0;

          mat[x1][y1]=-1;
          return numParths(mat, x1, y1+1, x2, y2) + numParths(mat, x1-1, y1, x2, y2) + numParths(mat, x1+1, y1, x2, y2) + numParths(mat, x1, y1-1, x2, y2);
    }

    public static void main (String[]args){
        int [][] mat={{1,2,3,4},{1,2,3,4},{1,2,3,4},{1,2,3,4}};
        System.out.println(numParths(mat, 0,1,2,3));
    }
numPathsDP(countMatrix,x+1,y+1,X,Y)
private static int numParths(int[]mat,int-x1,int-y1,int-x2,int-y2)
{
如果(x1mat.length-1 | | y1mat.length-1)
返回0;
如果(x1==x2&&y1==y2){
系统输出打印项次(“1”);
返回1;
}
if(mat[x1][y1]=-1)
返回0;
mat[x1][y1]=-1;
返回numParths(mat,x1,y1+1,x2,y2)+numParths(mat,x1-1,y1,x2,y2)+numParths(mat,x1+1,y1,x2,y2)+numParths(mat,x1,y1-1,x2,y2);
}
公共静态void main(字符串[]args){
int[]mat={{1,2,3,4},{1,2,3,4},{1,2,3,4},{1,2,3,4},{1,2,3,4};
系统输出println(numParths(mat,0,1,2,3));
}

这些问题可以通过使用递归和一些“干净的”代码来解决。不过,最好先在一般递归的基础上构建一个解决方案,看看是否可以使用动态编程来提高效率。 关于这个特殊的问题,我们可以通过将已经计算的信息(从参考点到目标点的路径数)存储在变量中来重用它。在这里,另一个具有类似维度的矩阵对我们很好(因为我们可能不想更改输入矩阵)

numPathsDP(countMatrix,x+1,y+1,X,Y)
以下是两种解决方案:

numPathsDP(countMatrix,x+1,y+1,X,Y)
  • 正常递归方法(不建议在效率方面使用)

    numPathsDP(countMatrix,x+1,y+1,X,Y)
    
  • 基于动态规划的方法(我们基本上是在上述递归方法的基础上构建的)

    numPathsDP(countMatrix,x+1,y+1,X,Y)
    
  • 总结一下。i、 例如,总数为

    numPathsDP(countMatrix,x+1,y+1,X,Y)
    
     countMatrix[x][y]=numPathsDP(countMatrix,x+1,y,X,Y)+numPathsDP(countMatrix,x,y+1,X,Y)+numPathsDP(countMatrix,x+1,y+1,X,Y) 
    
    在DP溶液中

    numPathsDP(countMatrix,x+1,y+1,X,Y)
    
  • 目标单元格可以从源单元格访问,并且源单元格和目标单元格都包含在原始矩阵中(基于矩阵的维度)

  • (1) 在这种情况下,“路径”是什么?(2) 你期待什么答案?(3) 它打印的是什么答案?难道不为所有正在执行的路径设置它吗?不应该在每次递归调用之前复制数组吗?