通过三角形数字递归搜索网格

时间:2013-11-07 06:25:00

标签: java recursion nodes triangular

我有一个36x25的节点网格,我想搜索斜边对面角落的所有三角形数字。这是我考虑的psuedocode,但是这种方法只有在它到达网格的下一个角落时才有效,而且我确信有一种更简单的方法可以递归地执行此操作,我只是很难搞清楚它。

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个设置图块之前工作。任何进一步的,它将超出范围。

1 个答案:

答案 0 :(得分: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维度。然后,我们在右侧做了类似的事情。