我试图遍历下面给出的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
....
如何解决这个问题,以便递归是逐行的。
答案 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);
}