打印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]

