Teka-teki
Petak ajaib pesanan ketiga. Cuba isi 9 integer berbeza dari 1 hingga 9 ke dalam jadual 3×3 supaya jumlah nombor dalam setiap baris, lajur dan pepenjuru adalah sama.
Strategi
Pencarian menyeluruh. Senaraikan semua senario padding integer, kemudian tapis.
Penyelesaian JavaScript
fungsi getPermutation(arr) {
jika (arr.length == 1) {
Kembali [arr];
}
pilih atur var = [];
untuk (var i=0; i
var arrClone = arr.slice(0);
arrClone.splice(i, 1);
var childPermutation = getPermutation(arrClone);
untuk (var j=0; j
}
Permutasi = pilih atur.concat(childPermutation);
}
Pulangan pilih atur;
}
fungsi mengesahkanCalon(calon) {
var sum = calon[0] calon[1] calon[2];
untuk (var i=0; i<3; i ) {
Jika (!(sumOfLine(calon,i)==sum && sumOfColumn(calon,i)==sum)) {
Kembalikan palsu;
}
}
if (sumOfDiagonal(calon,true)==sum && sumOfDiagonal(calon,false)==sum) {
Kembalikan benar;
}
pulangkan palsu;
}
fungsi sumOfLine(calon, baris) {
kembali calon[baris*3] calon[baris*3 1] calon[baris*3 2];
}
fungsi sumOfColumn(calon, kol) {
kembali calon[kol] calon[kol 3] calon[kol 6];
}
fungsi sumOfDiagonal(calon, isForwardSlash) {
return isForwardSlash ? candidate[2] candidate[4] candidate[6] : candidate[0] candidate[4] candidate[8];
}
permutasi var = getPermutation([1,2,3,4,5,6,7,8,9]);
var calon;
untuk (var i=0; i
if (validateCandidate(calon)) {
Rehat;
} lain {
calon = batal;
}
}
jika (calon) {
console.log(calon);
} lain {
console.log('Tiada hasil sah ditemui');
}
Keputusan
digambarkan sebagai segi empat sama ajaib:
Analisis
Menggunakan strategi ini, anda secara teorinya boleh mendapatkan penyelesaian kepada mana-mana kuasa dua ajaib pesanan n, tetapi sebenarnya anda hanya boleh mendapatkan penyelesaian khusus kuasa dua ajaib urutan ke-3, kerana apabila n>3, operasi menyeluruh untuk mendapatkan semua penyelesaian pengisian adalah memakan masa yang sangat besar.