计算矩阵中元素之间的路径数

时间:2017-12-12 14:18:53

标签: java recursion

我正在编写一个代码,用于计算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

1 个答案:

答案 0 :(得分:1)

没有什么能阻止你回到你已经去过的牢房。