我学习Java,但仍从事家庭作业。我一直在寻找解决问题的所有方法,但没有成功。我的任务是这样:
仅包含正整数的二维正方形数组。 我们将数组中的路径定义为相邻单元格的集合,并且相邻单元格可以从上,从下,从右和左为邻居。每个单元只能在路线上出现一次。我必须编写一个递归布尔静态方法,该方法接受包含以下内容的二维mat数组作为参数 正整数(大于零),任何正整数和以及方法 接受与mat大小相同的二维数组路径作为参数。 该方法应检查数组中是否存在总和为总和的路径 该方法返回true。否则,将返回假值。 path数组用于标记总和为sum的路由。 最初,当路径数组作为参数传递时,其所有单元格的值都为0。 在该方法的最后,如果在mat数组中有一个路径,并且sum是sum,则该路径数组在参与的单元格中将包含1 在轨道上,在所有其他像元中为0。如果mat数组中没有这样的路径,则该路径数组应包含在其所有单元格中 如果有多个路径的总和为sum,则路径数组将包含以下路径之一 谁的总和是(任意)总和。 例如,给定以下mat数组:
(2, 41, 3, 14) ,(2, 1, 24, 7),(2, 15, 10, 54),(63, 22, 2, 4)
总和为4,该方法返回true,并且path数组可以是以下三个数组之一:
(0,0,0,0),(0, 0 ,0, 0),(0, 0, 0, 0),(0 ,0 ,0 ,1)
或(1, 0, 0, 0),(1 ,0 ,0 ,0),( 0, 0, 0, 0),( 0, 0, 0, 0)
或( 0 ,0 ,0 ,0),(1 ,0 ,0, 0),(1 ,0 ,0 ,0),( 0, 0, 0, 0)
该方法的签名为:
public static boolean findSum (int mat [] [], int sum, int path [] [])
并且整个方法只能是递归的。我尝试的解决方案是:
public static boolean findSum (int mat[][], int sum, int path[][])
int i=0;
int j=0;
int res=0;
int temp=mat[i][j];
mat[i][j]=-1;
if (findsum(mat,sum,path,i+1,j,res+mat[i][j]))
return true;
if (findsum(mat,sum-mat[i][j],path,i-1,j,res+mat[i][j]))
return true;
if (findsum(mat,sum-mat[i][j],path,i,j+1,res+mat[i][j]))
return true;
return(findsum(mat,sum-mat[i][j],path,i,j-1,res+mat[i][j]));
private static boolean findsum(int mat[][],int sum,int path[][],int i,
int j,int res)
{
if(i==mat.length&&j==mat[0].length-1)
if(res==sum)
return true;
return false;
但是代码不起作用,我也不知道如何打印表格并解决任务:(