我正在编写一个代码,用于计算n阶方阵中从(0,0)到(n-1,n-1)的可用路径数。我试图使用递归实现代码,但代码给出stackoverflow错误。有人可以帮我找到我的代码所需的更正。 输入包含第一行中的测试用例数。 对于每个测试用例,遵循具有矩阵顺序的行 然后n x n矩阵如下面的代码输入中的示例输入所示 在矩阵1中表示一个块,路径只能通过0跟踪。
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStreamReader;
import java.lang.Integer;
import java.util.LinkedList;
import java.lang.Math.*;
public class TestClass {
public static int ans,arr[][];
public static void main(String args[] )throws Exception{
File file=new File("C:\\Users\\Mujeeb\\Desktop\\ii.txt");
BufferedReader br = new BufferedReader(new InputStreamReader(new
FileInputStream(file), "ASCII"));
int cases = Integer.valueOf(br.readLine());
for(int x=0; x<cases;x++){
int n= Integer.valueOf(br.readLine());
ans=0;
arr=new int[n][n];
for(int t1=0;t1<n;t1++){
int t2=0;
for(String s:br.readLine().split("\\s+")){
arr[t1][t2]=Integer.valueOf(s);
t2++;
}
}
if(arr[0][0]==1 || arr[n-1][n-1]==1){
System.out.println(ans);
}else{
if(arr[0][1]==0){
findpath(0,1,0,0,n);
}
if(arr[1][0]==0){
findpath(1,0,0,0,n);
}
System.out.println(ans);
}
}
}
public static void findpath(int x,int y,int xp,int yp,int n){
if(x==n-1 &&y==n-1){
ans++;
}
else{
if(x<n-1){
if(arr[x+1][y]==0 && !((x+1==xp) && (y==yp))){
findpath(x+1,y,x,y,n);
}
}
if(x>0){
if(arr[x-1][y]==0 && !((x-1==xp) && (y==yp))){
findpath(x-1,y,x,y,n);
}
}
if(y<n-1){
if(arr[x][y+1]==0 && !((x==xp) && (y+1==yp))){
findpath(x,y+1,x,y,n);
}
}
if(y>0){
if(arr[x][y-1]==0 && !((x==xp) && (y-1==yp))){
findpath(x,y-1,x,y,n);
}
}
}
}
}
示例输入:
1
4
0 1 1 0
0 0 1 0
0 0 0 0
0 1 1 0
答案 0 :(得分:1)
没有什么能阻止你回到你已经去过的牢房。