2014-10-01 4 views
0
나는 아래에 주어진 2 차원 매트릭스를 통과하려고

를 사용하여 행 방향 :수 트래버스하지 행 방향으로 2 차원 매트릭스를 통해 재귀

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 
내가 사용하고

재귀 방법은 경우 처음에 나는 = 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

행렬을 이진 트리처럼 탐색합니다. 모든 요소에 대해 두 개의 아들, 즉 (i, j + 1)과 (i + 1, j)를 방문합니다.

시작 노드는 (0, 0)입니다. 첫 번째 재귀 수준에서는 (0, 1) 및 (1, 0)을 방문합니다. 두 번째 단계에서는 (0, 2), (1,1), (1,1), (2, 0) [두 번 방문한다. 제 3 레벨에서, (1, 2), (2, 1), (1, 2), (2, 1), (1, 2), (2, 1) 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); 
} 
관련 문제