0

斜辺の反対側の角からすべての三角形の数を検索したいノードの 36x25 グリッドがあります。これが私が考えていた疑似コードですが、この方法はグリッドの次のコーナーに到達するまでしか機能しません。これを再帰的に行うもっと簡単な方法があると確信しています。

for(int iteration; iteration < maxDistance(49); iteration++)
{
    int xAdd = iteration;
    int yAdd = 0;
    while(xAdd != 0)
    {
        checkStuff(nodeGrid[x+xAdd][y+yAdd]);
        xAdd--;
        yAdd++;
    }
}

プログラムでやりたいこと:

[0][1][2][3][4][5]
[1][2][3][4][5][6]
[2][3][4][5][6][7]
[3][4][5][6][7][8]
[4][5][6][7][8][9]

この順番でチェック。したがって、最初に値が 0 のすべてのタイルをチェックし、次に 1 などをチェックします。

注: この場合、関数は 4 番目のセットアップ タイルまでしか機能しません。それ以上進むと範囲外になります。

4

1 に答える 1

0
/**
 * Only works for rectangular arrays
 */
public void iterateOver(Node[][] a){
    int x_dim = a[0].length;
    int y_dim = a.length;

    for (int i = 0; i < x_dim + y_dim - 1; i++){
        int x, y;
        if (i < x_dim){
            x = i;
            y = 0;
        }
        else{
            x = x_dim - 1;
            y = i - x_dim + 1;
        }
        for (;x >=0 && y < y_dim; y++, x--){
            doStuff(a[y][x]);
        }

    }
}

使い方

長方形の配列を想像してください:

[0][1][2][3][4][5]
[1][2][3][4][5][6]
[2][3][4][5][6][7]
[3][4][5][6][7][8]
[4][5][6][7][8][9]

明らかに 6 つの列と 5 つの行 (または 6 つの x 値と 5 つの y 値) があります。つまり6 + 5 - 1、10 回の反復を行う必要があります。したがって、for (int i = 0; i < x_dim + y_dim - 1; i++). (iは現在の反復で、0 から測定されます)。列から始めます。iが x 次元よりも小さい場合はx = iy = 0まず始めに。が0 未満になるか、y 次元に等しくなるまでx、減分およびy増分されます。次に、右側で同様のことを行います。xy

于 2013-11-07T21:23:18.977 に答える