java - 递归打印矩阵中的所有路径

标签 java algorithm recursion

我遇到了一个解决方案HERE 。有人可以解释一下这是如何工作的吗?特别是,我无法理解的一件事是递归调用。其中之一new ArrayList<>(path)在其他中简单地通过 path已通过。为什么 ?解决方案之间工作正常。

public class Main {

    public static void getPaths(int[][]A, int i, int j, ArrayList<Integer> path, ArrayList<ArrayList<Integer>> allPaths) {
        int n = A.length;
        if (i>=n || j>=n) return;

        path.add(A[i][j]);

        if (i==n-1 && j==n-1) {
            allPaths.add(path);
            return;
        }
        getPaths(A, i, j+1, new ArrayList<>(path), allPaths);
        getPaths(A, i+1, j, path, allPaths);
    }

    public static void main(String[] args) {
        ArrayList<ArrayList<Integer>> allPaths = new ArrayList<>();
        getPaths(new int[][] { {1,2,3},{4,5,6},{7,8,9}}, 0,0, new ArrayList<Integer>(), allPaths );
        System.out.println(allPaths);
    }
}

最佳答案

创建到目前为止路径的副本并在第一个递归调用中传递,以便可以将更多条目添加到路径中。我们不需要在第二次调用中传递它,因为第二次调用所添加的任何条目都是第一次调用路径的一部分。

关于java - 递归打印矩阵中的所有路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28677220/

相关文章:

algorithm - 关联数组查找成本

php - 名称比较算法

algorithm - 如何在不递归的情况下通过 +3 或 *5 操作获取目标数字?

java - sql.date 与 util.date

java - 如何删除Android中谷歌地图上显示的路线?

algorithm - 计算括号平衡的分布式算法

python - 递归Python函数的值修 retrofit 饰器

java - Hadoop 中所有节点的公共(public)变量

java - 安装为 snap 包时如何配置 netbeans?

php - 得到n深类别树后的多维数组