5

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

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

基本的には、下の写真の数字のようにグリッドを横に、すべてのセルを覆うまで探したいと思います。私のアプローチはうまくいかなかったので、ここで助けを求めています。

ここに画像の説明を入力

これを可能な限り最速の方法で達成するにはどうすればよいですか? これは 2 つのループだけを使用して実行できるはずですが、わかりません。

4

1 に答える 1

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はグリッドの幅です。

このアルゴリズムは、各対角線について、上端と右端までの距離の合計が一定のままであるという観測に基づいています。

外側のループは対角線を反復します。対角線上のすべてのセルにわたる内側のループ。

于 2012-05-01T07:59:22.473 に答える