-1

我需要一个双循环来产生一系列的值。这是为我正在尝试制作的迷宫生成程序(使用 DFS 方法)寻找相邻单元格的一部分。这是一些伪代码:

var values = [];
for (...) {
    for (...) {
        values.push([i, j]);
    }
}

循环运行后,“值”应该是[[0, 1], [0, -1], [1, 0], [-1, 0]]

谢谢您的帮助!

4

3 回答 3

2
for (var i = -1; i < 2; i++) {
    for (var j = -1; j < 2; j++) {
        if (Math.abs(i) + Math.abs(j) == 1)
        values.push([i, j]);
    }
}
于 2012-10-15T14:27:35.523 回答
2

好。你的确切结果可以这样实现:

var seed_values = [1, -1, 0, 0];
var values = [];

for (var i = 0; i < 4; i++) {
    values.push([seed_values[i], seed_values[(i+2)%4]]);
}
于 2012-10-15T14:30:39.013 回答
1

您的数组中没有真正的结构,因此循环只会使其过于复杂。使用您已有的数组文字。

如果是[[0, 1], [1, 0], [0, -1], [-1, 0]],这可以帮助您:

for (var values=[], i=0; i<Math.PI*2; i+=Math.PI/2)
    values.push([Math.cos(i), Math.sin(i)]);

…但不幸的是,它不能计算精确的零点,只能计算非常接近的值 - 你也必须Math.round.

对于你的数组和嵌套循环结构,我只能想到

var values = [];
for (var i=0; i<2; i++) {
    for (var j=1; j>=-1; j-=2, i*=-1) {
        values.push([i, +!i && j]);
    }
}

丑陋,不是吗?但它确实运行了两个嵌套循环,每个循环两次:-)

于 2012-10-15T14:45:41.093 回答