JavaScript实现三阶幻方算法谜题解答

前端之家收集整理的这篇文章主要介绍了JavaScript实现三阶幻方算法谜题解答前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

谜题

三阶幻方。试将1~9这9个不同整数填入一个3×3的表格,使得每行、每列以及每条对角线上的数字之和相同。

策略

穷举搜索。列出所有的整数填充方案,然后进行过滤。

JavaScript解

代码如下:

function getPermutation(arr) { if (arr.length == 1) { return [arr]; }

var permutation = []; for (var i=0; i

function validateCandidate(candidate) { var sum = candidate[0] + candidate[1] + candidate[2]; for (var i=0; i<3; i++) { if (!(sumOfLine(candidate,i)==sum && sumOfColumn(candidate,i)==sum)) { return false; } } if (sumOfDiagonal(candidate,true)==sum && sumOfDiagonal(candidate,false)==sum) { return true; } return false; } function sumOfLine(candidate,line) { return candidate[line*3] + candidate[line*3+1] + candidate[line*3+2]; } function sumOfColumn(candidate,col) { return candidate[col] + candidate[col+3] + candidate[col+6]; } function sumOfDiagonal(candidate,isForwardSlash) { return isForwardSlash ? candidate[2]+candidate[4]+candidate[6] : candidate[0]+candidate[4]+candidate[8]; }

var permutation = getPermutation([1,2,3,4,5,6,7,8,9]); var candidate; for (var i=0; i

结果

代码如下:

描绘成幻方即为:

代码如下:

分析

使用此策略理论上可以获取任意n阶幻方的解,但实际上只能获得3阶幻方这一特定解,因为当n>3时,获取所有填充方案这一穷举操作的耗时将变得极其巨大。

猜你在找的JavaScript相关文章