使用递归不能通过2d矩阵遍历行

时间:2014-10-01 12:20:28

标签: java algorithm recursion matrix backtracking

我试图遍历下面给出的2d矩阵:

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
....

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

1 个答案:

答案 0 :(得分: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);
}