如何将值放在multidim数组中 - 比如棋盘上的6个皇后 - javascript

时间:2013-10-08 20:05:48

标签: javascript arrays

我有一个看起来像这样的数组

    board = [
                [0, 0, 0, 0, 0 ,0, 0, 0],
                [0, 0, 0, 0, 0 ,0, 0, 0],
                [0, 0, 0, 0, 0 ,0, 0, 0],
                [0, 0, 0, 0, 0 ,0, 0, 0],
                [0, 0, 0, 0, 0 ,0, 0, 0],
                [0, 0, 0, 0, 0 ,0, 0, 0],
                [0, 0, 0, 0, 0 ,0, 0, 0],
                [0, 0, 0, 0, 0 ,0, 0, 0]
             ];

有没有办法,只需使用2 for循环,就像这样

    for(var i = 0; i < 7; i++){
        for(var j = 0; j < 7; j++){
            //actions here
        }
    }

放置6个值1,第一个值1替换数组中的第一个0,接下来的5个放置使用相同的规则将棋盘放置在棋盘上。结果应如下所示

    board = [
                [1, 0, 0, 0, 0 ,0, 0, 0],
                [0, 0, 1, 0, 0 ,0, 0, 0],
                [0, 0, 0, 0, 1 ,0, 0, 0],
                [0, 1, 0, 0, 0 ,0, 0, 0],
                [0, 0, 0, 1, 0 ,0, 0, 0],
                [0, 0, 0, 0, 0 ,0, 1, 0],
                [0, 0, 0, 0, 0 ,0, 0, 0],
                [0, 0, 0, 0, 0 ,0, 0, 0]
             ];

我是javascript的新手,我不知道如何开始这个。有人可以给我一些提示。

2 个答案:

答案 0 :(得分:0)

board [xCord] [yCord] = ValueToInsert;

我可能误解了您的问题,所以这里有更多信息。

您可以将另一个数组“推”到1d数组中。

myArr.push([]);

然后按这样推送值:

myArr[Xcord].push(YValue);

答案 1 :(得分:0)

您需要创建一个函数来检查在xy坐标上放置一个后缀是否有效。该函数将检查该行,列或对角线中是否有王后。您还可以创建主函数的这三个子函数。

然后,当你完成循环时,对每个字段使用该函数,如果它返回true,则放置后。如果是假,继续前进。

当然,最终会有很多解决方案,所以您可能希望将所有这些解决方案保存/存储在一个数组中。

另外,想一想优化算法的方法:例如,如果你连续设置一个女王,那么就不需要检查该行中的任何其他字段等。

当你决定真正掌握自己的技能时,请尝试使用递归函数来生成解决方案。