>  기사  >  웹 프론트엔드  >  JavaScript는 3차 마방진 알고리즘 퍼즐을 구현합니다.

JavaScript는 3차 마방진 알고리즘 퍼즐을 구현합니다.

WBOY
WBOY원래의
2016-05-16 16:23:441962검색

퍼즐

3차 마방진. 1부터 9까지의 9개의 서로 다른 정수를 3×3 테이블에 채워 각 행, 열, 대각선의 숫자의 합이 동일하도록 해보세요.

전략

철저한 검색. 모든 정수 패딩 시나리오를 나열한 다음 필터링합니다.

자바스크립트 솔루션

코드 복사 코드는 다음과 같습니다.

/**
 * cshao가 14년 12월 28일에 작성했습니다.
 */

함수 getPermutation(arr) {
if (arr.length == 1) {
반품 [arr];
}

var 순열 = [];
for (var i=0; i var firstEle = arr[i];
var arrClone = arr.slice(0);
arrClone.splice(i, 1);
var childPermutation = getPermutation(arrClone);
for (var j=0; j childPermutation[j].unshift(firstEle);
}
순열 = permutation.concat(childPermutation);
}
순열 반환;
}

함수 verifyCandidate(후보) {
var sum = 후보[0] 후보[1] 후보[2];
for (var i=0; i If (!(sumOfLine(candidate,i)==sum && sumOfColumn(candidate,i)==sum)) {
거짓을 반환합니다.
}
}
if (sumOfDiagonal(candidate,true)==sum && sumOfDiagonal(candidate,false)==sum) {
true를 반환합니다.
}
false를 반환합니다.
}
function sumOfLine(후보, 라인) {
return Candidate[라인*3] Candidate[라인*3 1] Candidate[라인*3 2];
}
함수 sumOfColumn(후보, 열) {
반환 후보[열] 후보[열 3] 후보[열 6];
}
함수 sumOfDiagonal(candidate, isForwardSlash) {
return isForwardSlash ? 후보[2] 후보[4] 후보[6] : 후보[0] 후보[4] 후보[8];
}

var 순열 = getPermutation([1,2,3,4,5,6,7,8,9]);
var 후보;
for (var i=0; i 후보 = 순열[i];
if (validateCandidate(후보)) {
휴식;
} 그 밖의 {
후보 = null;
}
}
if (후보자) {
console.log(후보);
} 그 밖의 {
console.log('유효한 결과가 없습니다.');
}

결과


코드 복사 코드는 다음과 같습니다.

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

은 마방진으로 표현됩니다.


코드 복사 코드는 다음과 같습니다.

2 7 6
9 5 1
4 3 8

분석

이 전략을 사용하면 이론적으로는 모든 n차 마방진에 대한 해를 얻을 수 있지만 실제로는 3차 마방진의 특정 해만 얻을 수 있습니다. 모든 충전 솔루션은 시간이 많이 소요됩니다.

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.