Java 中从左上角到右下角的矩阵可能路径

2024年9月10日 | 阅读 6 分钟

在本节中,我们将学习如何在Java中找到从矩阵左上角到右下角的可能路径。这是面试中一个非常重要的问题。从左上角到右下角的移动约束是,从任何单元格出发,只能向右(→)或向下(↓)移动。为了更好地理解,我们来看几个例子。

注意:建议读者先学习数组和递归,然后再阅读本主题。

示例

示例 1

在上图的 3 * 3 矩阵中,需要从标记为 1 的单元格移动到标记为 5 的单元格。从单元格 1,可以移动到单元格 4 或单元格 7。同样,从单元格 4,可以移动到单元格 8 或单元格 2,从单元格 7,可以移动到单元格 6 或单元格 8。如此继续,将得到以下结果。

因此,我们看到有 6 种方法可以从标记为 1 的单元格到达标记为 5 的单元格。

示例 2

在上图的 2 * 4 矩阵中,将得到以下结果。

因此,我们看到有 4 种方法可以从标记为 2 的单元格到达标记为 9 的单元格。

使用递归

简单的递归足以解决这个问题。首先,我们显示所有向下移动的路径,然后显示所有向右移动的路径。我们将对路径中遇到的每个单元格进行递归处理。

实施

以下是打印矩阵从左上角到右下角可能路径的实现。

文件名: TopLeftBottomRightPath.java

输出

For the matrix: 
1 4 2 
7 8 0 
6 3 5 

The possible paths from the top left to the bottom right is: 
[1, 7, 6, 3, 5]
[1, 7, 8, 3, 5]
[1, 7, 8, 0, 5]
[1, 4, 8, 3, 5]
[1, 4, 8, 0, 5]
[1, 4, 2, 0, 5]

使用迭代

我们也可以使用迭代来解决这个问题。在这种方法中,我们将使用广度优先搜索 (BFS)。将使用一个队列,其中包含单元格坐标和到特定单元格的路径。从左上角单元格开始,我们将单元格的坐标和值(单元格的值存储在向量中)推入队列。我们将继续探索向下和向右的单元格,直到队列不为空,并且还将继续将未发现的单元格推入队列。当我们到达矩阵的右下角单元格时,包含所探索单元格值的向量就是我们的答案。

输出

For the following matrix: 
[1, 4, 2]
[7, 8, 0]
[6, 3, 5]

The possible paths from the top left to the bottom right is: 
1 4 2 0 5 
1 4 8 0 5 
1 4 8 3 5 
1 7 8 0 5 
1 7 8 3 5 
1 7 6 3 5