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开始。x递减并y递增,直到x小于零或y等于 y 维度。然后,我们在右手边做类似的事情。

于 2013-11-07T21:23:18.977 回答