编程语言
首页 > 编程语言> > JavaScript-随机1-5 5×5数组

JavaScript-随机1-5 5×5数组

作者:互联网

我正在尝试制作一个5×5的表格,该表格会将数字1-5随机放入行/列中.但是它们需要为每一行和每一列具有所有不同的数字.

例如:
12345
54123
41532
35214
23451

我当前拥有的代码很长,因此我将提供一个pastebin链接. http://pastebin.com/ex1bcLxh

任何和所有帮助将不胜感激.

解决方法:

这就是我想出的主意-我没有为优化而烦恼,因为问题中提到的5×5的网格大小感觉是瞬间的. (即使在IE7中进行测试,甚至7×7网格也只需要花费几秒钟的时间.8×8的运行速度明显慢一些,有时甚至慢到足以触发长时间运行的脚本错误.)

function createGrid(size) {
   var grid = [],
       row = [],
       x,y,t;

   for (x=size; x>0; x--)
      row.push(x);

   addRows:
   while (grid.length < size) {
      t = row.slice();
      row = [];
      while (t.length > 0)
         row.push(t.splice(Math.floor(Math.random() * t.length), 1)[0]);

      for (y=0; y<grid.length; y++)
         for (x=0; x<size; x++)
            if (row[x] === grid[y][x])
               continue addRows;

      grid.push(row);
   }

   return grid;   
}

var test = createGrid(5);
alert(test.join("\n"));

如果不太明显,基本思想是从行[5,4,3,2,1]开始;随机排列该行并检查是否可以添加;重复直到完成.

(我考虑过先生成所有可能的行,然后从它们中随机选择,但是考虑到我对排列算法不是很满意,这似乎太麻烦了-每次都随机洗牌似乎麻烦很多.)

标签:random,combinatorics,javascript,algorithm
来源: https://codeday.me/bug/20191202/2085308.html