Maison  >  Article  >  interface Web  >  JavaScript implémente un algorithme de carré magique de troisième ordre. Solution de puzzle_javascript skills

JavaScript implémente un algorithme de carré magique de troisième ordre. Solution de puzzle_javascript skills

WBOY
WBOYoriginal
2016-05-16 16:23:441957parcourir

Puzzle

Carré magique de troisième ordre. Essayez de remplir 9 entiers différents de 1 à 9 dans un tableau 3×3 afin que la somme des nombres de chaque ligne, colonne et diagonale soit la même.

Stratégie

Recherche exhaustive. Répertoriez tous les scénarios de remplissage d’entiers, puis filtrez.

Solution JavaScript

Copier le code Le code est le suivant :

/**
 * Créé par cshao le 28/12/14.
 */

fonction getPermutation(arr) {
if (arr.length == 1) {
Retour [arr];
>

var permutation = [];
pour (var i=0; i var firstEle = arr[i];
var arrClone = arr.slice(0);
arrClone.splice(i, 1);
var childPermutation = getPermutation(arrClone);
pour (var j=0; j childPermutation[j].unshift(firstEle);
>
Permutation = permutation.concat(childPermutation);
>
Permutation de retour ;
>

fonction validateCandidate(candidat) {
var somme = candidat[0] candidat[1] candidat[2];
pour (var i=0; i<3; i ) {
Si (!(sumOfLine(candidat,i)==somme && sumOfColumn(candidat,i)==somme)) {
Renvoie faux ;
>
>
if (sumOfDiagonal(candidat,true)==somme && sumOfDiagonal(candidat,false)==somme) {
Renvoie vrai ;
>
retourner faux ;
>
function sumOfLine(candidat, ligne) {
return candidate[line*3] candidate[line*3 1] candidate[line*3 2];
>
function sumOfColumn(candidat, col) {
retourner candidat[col] candidat[col 3] candidat[col 6];
>
fonction sumOfDiagonal (candidat, isForwardSlash) {
return isForwardSlash ? candidat[2] candidat[4] candidat[6] : candidat[0] candidat[4] candidat[8];
>

var permutation = getPermutation([1,2,3,4,5,6,7,8,9]);
candidat var;
pour (var i=0; i candidat = permutation[i];
if (validateCandidate(candidat)) {
Pause ;
} autre {
candidat = nul;
>
>
si (candidat) {
console.log(candidat);
} autre {
console.log('Aucun résultat valide trouvé');
>

Résultats


Copier le code Le code est le suivant :

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

est représenté comme un carré magique :


Copier le code Le code est le suivant :

2 7 6
9 5 1
4 3 8

Analyse

En utilisant cette stratégie, vous pouvez théoriquement obtenir la solution de n'importe quel carré magique d'ordre n, mais en fait vous ne pouvez obtenir que la solution spécifique du carré magique d'ordre 3, car lorsque n>3, l'opération exhaustive d'obtention toutes les solutions de remplissage sont Le temps sera extrêmement énorme.

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn