2012-05-01 4 views
4

저는이 두 개의 간단한 루프를 사용하여 높이에서 아래로, 오른쪽에서 왼쪽으로 그리드를 검색합니다.격자를 통해 반복하기

for(int y=0; y<height; y++){ 
    for(int x=width; x>=0; x--){ 
    } 
} 

는 기본적으로, 나는 모든 셀을 포함 할 때까지 아래 그림의 번호와 같은 격자 옆 통해 ​​검색 할. 내 접근 방식이 잘 돌아 가지 않아 여기서 도움을 요청하고 있습니다.

enter image description here

어떻게이 가능한 가장 빠른 방법을 수행 할 수 있습니까? 나는 이것이 단지 두 개의 루프를 사용하여 가능해야한다고 믿지만 그것을 이해할 수는 없다.

+1

문제가 해결되지 않았습니까? 그리드는 어떻게 설정 되나요? 빈 셀이 있습니까? 그렇다면 연결된 셀만 찾으시겠습니까? – Thomas

+0

오른쪽 위에서 아래로 그리드를 반복하고 싶습니다. –

답변

9

다음은 그것을 할 것 : 여기

final int h = 4; 
final int w = 3; 
for (int d = 0; d < w + h; d++) { 
    for (int y = 0; y < h; y++) { 
     int x = w - d + y; 
     if (x < 0 || x >= w) continue; 
     System.out.printf("%d %d\n", x, y); 
    } 
} 

, h는 높이와 w는 그리드의 폭이다.

알고리즘은 각 대각선에 대해 위쪽 가장자리와 오른쪽 가장자리까지의 거리의 합이 일정하다는 관찰에 기반합니다.

외부 루프는 대각선을 반복합니다. 대각선상의 모든 셀들에 대해 내부 루프.

+0

Brilliant! 대각선의 수를 세고 각 대각선을 반복합니다. +1 – ArjunShankar

+0

아주 좋은 해결책! 고맙습니다! –