我试图在 JS 中随机填充一个二维数组,但我希望在每一行和每一列中生成的数字都是唯一的。这是我的进度。这可以为 3x3 网格做到这一点我的意思是随机生成的数字但是我想要 9x9 的大小,就像真正的数独一样。谢谢。
//create table
function UpdateTable() {
var arr = [];
while(arr.length < 10){
var randomnumber = Math.floor(Math.random()*10);
if(arr.indexOf(randomnumber) > -1 ) continue;
arr[arr.length] = randomnumber;
}
tmp1 = 'cell' + 1;
tmp2 = 'cell' + 2;
tmp3 = 'cell' + 3;
tmp4 = 'cell' + 4;
tmp5 = 'cell' + 5;
tmp6 = 'cell' + 6;
tmp7 = 'cell' + 7;
tmp8 = 'cell' + 8;
tmp9 = 'cell' + 9;
var temp = [tmp1, tmp2, tmp3, tmp4, tmp5, tmp6, tmp7, tmp8, tmp9];
for (var i = 0; i < 10; i++) {
document.getElementById(temp[i]).innerHTML = arr[i];
}
}
UpdateTable();
<center>
<div id="container">
<div id="header">
<h1>Welcome</h1>
</div>
<div id="content">
<table border="1" id="lotto">
<tr class="tr1">
<td class="normal" id="cell1"> </td>
<td class="normal" id="cell2"> </td>
<td class="normal" id="cell3"> </td>
</tr>
<tr class="tr2">
<td class="normal" id="cell4"> </td>
<td class="normal" id="cell5"> </td>
<td class="normal" id="cell6"> </td>
</tr>
<tr class="tr3">
<td class="normal" id="cell7"> </td>
<td class="normal" id="cell8"> </td>
<td class="normal" id="cell9"> </td>
</tr>
</table>
</div>
</div>
<input type="button" value="Re-generate Numbers" onclick="UpdateTable();" />
</center>
最佳答案
我会考虑一种不同的方法。
创建一个简单的数独板,如下所示,基本上将第一行向右移动 3 个位置(每 3 行)。
1,2,3,4,5,6,7,8,9 --> base row 1
4,5,6,7,8,9,1,2,3 --> shift base row 1 by 3 to right
7,8,9,1,2,3,4,5,6 --> shift base row 1 by 6 to right
2,3,4,5,6,7,8,9,1 --> shit base row by 1 to right (base row 2)
5,6,7,8,9,1,2,3,4 --> shift base row 2 by 3 to right
8,9,1,2,3,4,5,6,7 --> shift base row 2 by 6 to right
3,4,5,6,7,8,9,1,2 --> shift base row 1 by 2 to right (base row 3)
6,7,8,9,1,2,3,4,5 --> shift base row 3 by 3 to right
9,1,2,3,4,5,6,7,8 --> shift base row 3 by 6 to right
调用上面的基本数独板。
您现在可以随机排列列和行并且仍然拥有合法的数独棋盘。不过你需要小心。我们将第 1-3 行称为 rowblock1,将第 4-6 行称为 rowblock2,将最后 3 行称为 rowblock 3。列也是如此。我们可以将行 block 与其他行 block 交换,我们可以将列 block 与其他列 block 交换,并且仍然具有数独不变集。
您可以在同一 block 内交换列。
您可以在同一 block 内交换行。
您可以交换列索引是 3 列的倍数的列。 (例如第 1 和 4 列、第 1 和 7 列、第 3 和 9 列...等)
关于javascript - JS 和 HTML 中的数独,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51880325/