爲確保在一行上沒有重複的號碼,您可能需要一個混洗功能。對於列,你只需要很難做到這一點(查看以前的解決方案以查看該列是否存在數字)。我希望我不會混淆列的列,我傾向於做很多。
它類似於演化計算中的八皇后問題。回溯,純粹的隨機遊走或演變的解決方案可以解決這個問題。
此代碼需要一段時間,但它會完成這項工作。
Array.prototype.shuffle = function() {
var arr = this.valueOf();
var ret = [];
while (ret.length < arr.length) {
var x = arr[Math.floor(Number(Math.random() * arr.length))];
if (!(ret.indexOf(x) >= 0)) ret.push(x);
}
return ret;
}
function getSudoku() {
var sudoku = [];
var arr = [1, 2, 3, 4, 5, 6, 7, 8, 9];
sudoku.push(arr);
for (var i = 1; i < 9; i++) {
while (sudoku.length <= i) {
var newarr = arr.shuffle();
var b = false;
for (var j = 0; j < arr.length; j++) {
for (var k = 0; k < i; k++) {
if (sudoku[k].indexOf(newarr[j]) == j) b = true;
}
}
if (!b) {
sudoku.push(newarr);
document.body.innerHTML += newarr;
}
}
}
return sudoku;
}
您現在可以通過返回的二維數組迭代,並填補了數獨箱。霍拉,如果你需要任何幫助
你可以請添加html和Js到jsfiddle – Mitul
我會說,也許你需要首先建立一個數組數組或可能'null'它應該爲null,然後在頁面中創建元素會更容易。 – Filype
@Filype _「你到目前爲止嘗試過什麼?」_請參閱OP – guest271314