修复递归方法

时间:2013-06-23 13:15:32

标签: java recursion path

我正在尝试编写一个使用递归方法的程序查找从二维数组的开头到结尾的路径数。步骤应从[0] [0]开始直到结束。数组由0到99之间的int数字填充。

对于数组中的每个数字,可以向前两个不同的步骤:例如,如果[0] [0]为21,则下一步可以是[0 + 2] [0 + 1]或[0 + 1] [0 +2]。 该方法应返回不同路径的数量以到达最终点。

这是我的代码:

在编译期间,当方法获得[] [] array

时,会溢出
     public class two
        {
            int[][] _my=new int[0][0];
            public two ()
        {
        }
        static int count=0;
        public static int count;

ountPath(int[][] mat)
    {
        int nextX=0;
        int nextY=0;
        int current=mat[0][0];
        if (current<=9)
        {
            nextX=current;
            nextY=current;
            if (checkBorders(0,0,nextX,nextY,mat)==0)
            {
                return 0;
            }
        }
        else
        {
            nextX=(int)current/10;
            nextY=current%10;
            if (checkBorders(0,0,nextX,nextY,mat)==0)
            {
                return 0;
            }
        }
        countPath(mat,nextX,nextY);
        countPath(mat,nextY,nextX);
        return count;
    }

    public static int countPath(int[][] mat,int x,int y)
    {
        int current=mat[x][y];
        int nextX=0;
        int nextY=0;
        int terminate=0;
        if (current<=9)
        {
            nextX=current;
            nextY=current;
            if (checkBorders(x,y,nextX,nextY,mat)==0)
            {
                return 0;
            }
        }
        else
        {
            nextX=(int)current/10;
            nextY=current%10;
            if (checkBorders(x,y,nextX,nextY,mat)==0)
            {
                return 0;
            }
        }

        if (((mat.length-1)==nextY)&&((mat[0].length-1)==nextX))
        {
           terminate=1;
        }

        if (terminate==1)
            count++;
        else
        {
        countPath(mat,nextX,nextY);
        countPath(mat,nextY,nextX);
        }
        return count;
    }

    public static int checkBorders(int x,int y,int x1,int y1,int[][] mat)
    {
        int maxX=mat[0].length;
        int maxY=mat.length;
        if ((x+x1)>maxX)
            return 0;
        else if ((y+y1)>maxY)
            return 0;
        else return 1;
    }

}

请帮我修复代码。

1 个答案:

答案 0 :(得分:0)

你必须再添加一个bool数组,你将存储哪个状态已被访问过。现在您可能会遇到以下情况:

你在州A. 从州A,你可以去B州和C州。 从状态B,你可以进入状态A&lt; - 这将是无限循环。

此外,记忆将大大提高计算速度。

希望我帮助过你。