我有一个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个设置图块之前工作。任何进一步的,它将超出范围。
答案 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 = i
和y = 0
开头。 x
递减,y
递增,直到x
小于零或y
等于y维度。然后,我们在右侧做了类似的事情。