2012-05-01 1 views
4

これらの2つの単純なループを使用して、グリッドを高さから下部、右から左に検索します。グリッドをループする

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

基本的に、すべてのセルをカバーするまで、下の図の番号のように横にグリッドを検索したいと思います。私のアプローチはうまくいきませんので、私はここで助けを求めています。

enter image description here

どのように私はこれは可能な最も簡単な方法を達成することができますか?私はこれが2つのループを使って行うことが可能でなければならないと信じていますが、私はそれを理解できません。

+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

華麗!対角線の数を数え、各対角線をループします。 +1 – ArjunShankar

+0

非常に良い解決策!ありがとうございました! –