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)
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) 它打印的是什么答案?难道不为所有正在执行的路径设置它吗?不应该在每次递归调用之前复制数组吗?