javascript - JS 和 HTML 中的数独

标签 javascript html algorithm

我试图在 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">&nbsp;</td>
					<td class="normal" id="cell2">&nbsp;</td>
					<td class="normal" id="cell3">&nbsp;</td>
				</tr>
				<tr class="tr2">
					<td class="normal" id="cell4">&nbsp;</td>
					<td class="normal" id="cell5">&nbsp;</td>
					<td class="normal" id="cell6">&nbsp;</td>

				</tr>
				<tr class="tr3">
					<td class="normal" id="cell7">&nbsp;</td>
					<td class="normal" id="cell8">&nbsp;</td>
					<td class="normal" id="cell9">&nbsp;</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/

相关文章:

javascript - ReactJS - 换行符在组件之间丢失空格

javascript - 拆分函数是什么样的?

html - 带图像的 CSS 和 HTML 导航栏列表

javascript - 在 ng-repeat 中枚举数据目标

algorithm - 按最大元素对 k 个排序列表进行排序

algorithm - 当有很多用户和文件/目录时,一种快速查找给定用户和路径的文件或目录的方法

c - 之字形树打印

javascript - 我如何给某些边缘上课?

javascript - onclick提交按钮,检查输入是否为空

javascript - 通过 Javascript 更改 HTML 页面的颜色