打印MXN矩阵左上角到右下角的所有路径
时间:2020-02-23 14:35:31 来源:igfitidea点击:
在本教程中,我们将看到如何在MXN矩阵的左下角到右上角的所有路径。
问题
我们需要将所有路径从MXN矩阵的左下角打印。
我们可以向下移动或者向右移动。
解决方案
我们可以使用递归来解决此问题。
递归
- 我们将通过行和列来跟踪当前行和列。
- 路径将包含我们要打印的元素。
- 将当前元素添加到路径
- paths.add(矩阵[行] [列]);
- 通过更新行到行+ 1来下降
- MatrixPathHelper(列表,路径,矩阵,行+ 1,列);
- 通过更新列至列+ 1进行右转
- MatrixPathHelper(列表,路径,矩阵,行,列+ 1);
- 完成后,通过从列表中删除最后一个元素来回溯。
- paths.remove(paths.size() - 1);
- 基本情况1:
- 一旦我们到达最后一行,我们只能右转,因此从列中迭代到矩阵[0] .Length并将元素添加到路径。
- 基本情况2:
- 一旦我们到达最后一列,我们只能下降,因此将行迭代到矩阵.Length并向路径添加元素。
以下是完整的Java程序,用于将所有路径从MXN矩阵的左下角打印。
package org.igi.theitroad; import java.util.ArrayList; import java.util.List; public class PrintMatrixPaths { public static void main(String[] args) { PrintMatrixPaths cmp=new PrintMatrixPaths(); int[][] matrix= { {1,2,3}, {4,5,6}, {7,8,9} }; List<List<Integer>> printMatrixPaths = cmp.printMatrixPaths(matrix); System.out.println("Paths: "); for(List<Integer> list:printMatrixPaths) { System.out.println(list); } } public List<List<Integer>> printMatrixPaths(int [][] matrix) { List<List<Integer>> list = new ArrayList<>(); matrixPathsHelper(list, new ArrayList<Integer>(), matrix, 0,0); return list; } private void matrixPathsHelper(List<List<Integer>> list , List<Integer> paths, int [][] matrix, int row,int column){ //base case if(row==matrix.length -1) { ArrayList<Integer> pathsTemp=new ArrayList<>(paths); for (int i = column; i < matrix[0].length; i++) { pathsTemp.add(matrix[row][i]); } list.add(pathsTemp); return; } //base case if(column==matrix[0].length -1) { ArrayList<Integer> pathsTemp=new ArrayList<>(paths); for (int i = row; i < matrix.length; i++) { pathsTemp.add(matrix[i][column]); } list.add(pathsTemp); return; } //Add to list paths.add(matrix[row][column]); //Explore //go down matrixPathsHelper(list, paths, matrix,row+1,column); //go right matrixPathsHelper(list, paths, matrix,row,column+1); //Remove from list : backtrack paths.remove(paths.size() - 1); } }
输出
Paths: [1, 4, 7, 8, 9] [1, 4, 5, 8, 9] [1, 4, 5, 6, 9] [1, 2, 5, 8, 9] [1, 2, 5, 6, 9] [1, 2, 3, 6, 9]