【问题标题】:Can't traverse row-wise through 2d matrix using recursion无法使用递归逐行遍历二维矩阵
【发布时间】:2014-10-01 12:20:28
【问题描述】:

我正在尝试按行遍历下面给出的二维矩阵:

s o e g h 
f l p i e 
f i c o n 
d t p l m 
d u p r i

下面给出了我使用的递归方法,其中最初 i=0,j=0 和 maxRow = 5,maxCol = 5

public void traversingMatrix(int i, int j) {

    if (i >= maxRow || j >= maxCol) {
        return;
    }
    traversingMatrix(i, j + 1);
    traversingMatrix(i + 1, j);
}

我得到的输出是:

0 0
0 1
0 2
0 3
0 4
/* after this things get weird */
1 4
2 4
3 4
4 4
1 3
1 4
2 4
....

我该如何解决这个问题,以便递归是逐行的。

【问题讨论】:

    标签: java algorithm recursion matrix backtracking


    【解决方案1】:

    您正在遍历矩阵,就好像它是一棵二叉树:对于每个元素,您访问两个儿子,即 (i, j+1) 和 (i+1, j)。

    起始节点是 (0, 0)。在第一个递归级别,您访问 (0, 1) 和 (1, 0)。在第二层,(0, 2), (1, 1), (1, 1) 和 (2, 0) [注意双重访问]。在第三层,(0, 3), (1, 2), (2, 1), (1, 2), (2, 1), (1, 2), (2, 1) 和 (3, 0) [注意三次访问]。等等。 (实际访问不按此顺序进行。)

    修复:

    从一个节点,向左走;仅向下行的第一个节点。

    public void traversingMatrix(int i, int j) {
    
        if (i >= maxRow || j >= maxCol) {
            return;
        }
        traversingMatrix(i, j + 1);
        if (j == 0) traversingMatrix(i + 1, j);
    }
    

    【讨论】:

      猜你喜欢
      • 2012-03-15
      • 1970-01-01
      • 2020-06-02
      • 2011-02-21
      • 2021-06-10
      • 2019-03-25
      • 2021-12-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多