Membingungkan
Lapangan Magic Tingkat Ketiga. Cobalah untuk mengisi 9 bilangan bulat yang berbeda, 1 ~ 9, ke dalam tabel 3 × 3, sehingga jumlah angka pada setiap baris, setiap kolom, dan setiap diagonal adalah sama.
Strategi
Pencarian kelelahan. Sebutkan semua skema dan filter pengisian integer.
Solusi JavaScript
Salinan kode adalah sebagai berikut:
/**
* Dibuat oleh Chao pada 12/28/14.
*/
function getpermutation (arr) {
if (arr.length == 1) {
mengembalikan [arr];
}
var permutation = [];
untuk (var i = 0; i <arr.length; i ++) {
var firstele = arr [i];
var arrclone = arr.slice (0);
arrclone.splice (i, 1);
var childpermutation = getpermutation (arrclone);
untuk (var j = 0; j <childpermutation.length; j ++) {
childpermutation [j] .unshift (firstele);
}
permutation = permutation.concat (childPerMutation);
}
Memperbaiki permutasi;
}
fungsi validatecandidate (kandidat) {
var sum = kandidat [0] + kandidat [1] + kandidat [2];
untuk (var i = 0; i <3; i ++) {
if (! (sumofline (kandidat, i) == sum && sumofcolumn (kandidat, i) == sum)) {
mengembalikan false;
}
}
if (sumofdiagonal (kandidat, true) == sum && sumofdiagonal (kandidat, false) == sum) {
Kembali Benar;
}
mengembalikan false;
}
fungsi sumofline (kandidat, baris) {
kembalikan kandidat [baris*3] + kandidat [baris*3 + 1] + kandidat [baris*3 + 2];
}
fungsi sumofcolumn (kandidat, col) {
kandidat pengembalian [col] + kandidat [col + 3] + kandidat [col + 6];
}
fungsi sumofdiagonal (kandidat, isforwardslash) {
Kembalinya ISForwardslash? kandidat [2]+kandidat [4]+kandidat [6]: kandidat [0]+kandidat [4]+kandidat [8];
}
var permutation = getpermutation ([1,2,3,4,5,6,7,8,9]);
kandidat var;
untuk (var i = 0; i <permutation.length; i ++) {
kandidat = permutasi [i];
if (validatecandidate (kandidat)) {
merusak;
} kalau tidak {
kandidat = null;
}
}
if (kandidat) {
console.log (kandidat);
} kalau tidak {
console.log ('tidak ada hasil yang valid ditemukan');
}
hasil
Salinan kode adalah sebagai berikut:
[2, 7, 6, 9, 5, 1, 4, 3, 8]
Menggambarkannya sebagai alun -alun ajaib adalah:
Salinan kode adalah sebagai berikut:
2 7 6
9 5 1
4 3 8
menganalisa
Dengan menggunakan strategi ini, Anda secara teoritis dapat memperoleh solusi dari Square Magic N-order apa pun, tetapi pada kenyataannya, Anda hanya dapat memperoleh solusi spesifik dari Magic Square orde ketiga, karena ketika n> 3, operasi yang memakan waktu untuk mendapatkan semua skema pengisian akan menjadi sangat besar.