javascript三阶幻方算法难题

javascript三阶幻方算法难题
令人费解的事
三阶幻方,将9到9的1个整数填充成一个3×3的表,这样每行、每一列和每一对角线上的数之和是相同的。
策略
列出所有整数填充方案,然后过滤它们。
Javascript的解决方案
复制代码代码如下所示:
*由cshao 12 / 28 / 14。

* /

功能getpermutation(ARR){

如果(arr.length = = 1){

{是}返回;

}

var置换{ };

对于(var i = 0;i < arr.length;i++){

无功firstele = ARR {我};

无功arrclone = arr.slice(0);

ArrClone.splice(I,1);

无功childpermutation = getpermutation(arrclone);

对于(var j = 0;J < childpermutation.length;j++){

childpermutation {,} Unshift(firstele);

}

置换= permutation.concat(childpermutation);

}

返回排列;

}

功能validatecandidate(候选人){

var = =候选{ 0 } } +候选{ { 1 } } +候选{ 2 };

对于(var i = 0;i < 3;i + +){

如果(!(sumofline(候选人,我)= =和sumofcolumn(候选人,我)= =总和)){

返回false;

}

}

如果(sumofdianal(候选,真的)= =和sumofdianal(候选,false)= =总和){

返回true;

}

返回false;

}

功能sumofline(候选人线){

返回候选{行* 3 } +候选{行* 3 + 1 } +候选{行* 3 + 2 };

}

功能sumofcolumn(候选人Col){

返回候选{ + } +候选+ { + 3 + }候选+ { + 6 };

}

功能sumofdianal(候选人,isforwardslash){

返回isforwardslash候选{ 2 } { 4 } + +候选人候选人候选人{ 6 }:{ 0 } + +候选人候选人{ 4 } { 8 };

}

VAR排列= getpermutation({ 1,2,3,4,5,6,7,8,9 });

VaR的候选人;

对于(var i = 0;i < permutation.length;i++){

候选者=置换{ };

如果(validatecandidate(候选人)){

打破;

{人}

候选者=空;

}

}

如果(候选){

console.log(候选人);

{人}

console.log(没有有效的发现);

}
结果
复制代码代码如下所示:

{ 2, 7, 6,9, 5, 1,4, 3, 8 }
描绘幻方:
复制代码代码如下所示:

二百七十六

九百五十一

四百三十八
分析
利用这种策略理论可以得到任意n阶幻方,但实际上只有3阶幻方这一特殊解,因为当n>3时得到的所有填充方案都将成为极其巨大的穷举运算。

tag:算法难题幻方电脑软件Javascript

相关内容