包含数字的二维数组一种检查数组中是否存在轨迹的方法,其值的和是获得的数字

时间:2019-06-01 09:30:45

标签: java recursion

我学习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;    

但是代码不起作用,我也不知道如何打印表格并解决任务:(

0 个答案:

没有答案