所谓的方阵,举个例子:3X3的方格上填1-9个数字,使每行、每列、每个对角线的数字相加的和相等。这个算法可以填3以上的奇数方阵,填方阵有口诀:
1填左边正中央,依次斜填左上方,左边出格右侧填,上边出格下侧填,无处可填填右边。以下算法就是实现这个口诀(代码内有注释):
function SetMR(ct){
var MR=new Array(ct*ct);
var x_=0,y_=0,cur=Math.floor(ct/2)*ct;
//口诀:1填左边正中央,依次斜填左上方,左边出格右侧填,上边出格下侧填,无处可填填右边
MR[cur]=1;//1填左边正中央
for(var i=2;i<ct*ct+1;i++){
var t=cur;
x_=Math.floor(cur/ct)-1;y_=cur%ct-1;
if((y_<0)&&(x_>=0)){//左边出格右侧填
y_=ct-1;
}
if((x_<0)&&(y_>=0)){//上边出格下侧填
x_=ct-1;
}
cur=x_*ct+y_;
if(((x_<0)&&(y_<0))||(MR[cur]>0)){//无处可填填右边
cur=t+1;
}
MR[cur]=i;
}
for(var i=0;i<MR.length;i++){
document.write(MR[i]+‘,‘);
if((i+1)%ct==0){document.write(‘<br>‘);}
}
}
//SetMR(5);
原文:https://www.cnblogs.com/zhangxiny/p/15172272.html