Rumah >hujung hadapan web >tutorial js >JavaScript melaksanakan kemahiran teka-teki algoritma kuasa dua ajaib urutan ketiga penyelesaian_javascript

JavaScript melaksanakan kemahiran teka-teki algoritma kuasa dua ajaib urutan ketiga penyelesaian_javascript

WBOY
WBOYasal
2016-05-16 16:23:442019semak imbas

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

Salin kod Kod adalah seperti berikut:

/**
 * Dicipta oleh cshao pada 28/12/14.
 */

fungsi getPermutation(arr) {
jika (arr.length == 1) {
Kembali [arr];
}

pilih atur var = [];
untuk (var i=0; i var firstEle = arr[i];
var arrClone = arr.slice(0);
arrClone.splice(i, 1);
var childPermutation = getPermutation(arrClone);
untuk (var j=0; j childPermutation[j].unshift(firstEle);
}
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 calon = pilih atur[i];
if (validateCandidate(calon)) {
Rehat;
} lain {
calon = batal;
}
}
jika (calon) {
console.log(calon);
} lain {
console.log('Tiada hasil sah ditemui');
}

Keputusan


Salin kod Kod adalah seperti berikut:

[ 2, 7, 6, 9, 5, 1, 4, 3, 8 ]

digambarkan sebagai segi empat sama ajaib:


Salin kod Kod adalah seperti berikut:

2 7 6
9 5 1
4 3 8

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.

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn