(1)当
为奇数时,即
2m1时,算法为:首先,把1填在第一行的正中间。其次,若数k填在第i行第j列的格子中,那么k1应填在它的左上方即i1j1;如果
左上方没有格子,若i10那么k1填在第
行第j1列的格子中若j10那么k1填在第i1行第
列的格子中若i10j10那么k1填在第
行第
列的格子中。
再次,若按上述方法找到的格子都已经填过了数,那么,数k1填在第k个数的正下方。
具体实现时:用i0j0表明格子不存在。找到的格子都已经填过了数的这类数有个特点,那就是可
以整除
,即k
0。
(2)当
为双偶数时,即
22m时,算法为:将所要求的魔方阵分为上下左右4个
2
2的小方阵。首先,在左上角的方阵中做记号,每行每列,各取一半打上记号。然后,将其向其余3个方阵中映像。接着,从左上角格子开始按从左到右从上到下的
次序将1到
的值往方阵中填写但遇到作了标记的格子时跳过。再从右下角格子开始按从右到左从下到上的次序将1到
的值往方阵中填写但遇到已填过值的格子时跳过,既可以构成一个魔方阵。
具体实现时:左上角和右下角的
2
2的小矩阵偶行偶列奇行奇列赋值为0其余赋值为1;右上
角和左上角的
2
2的小矩阵偶行奇列奇行偶列赋值为0其余赋值为1。然后,从左上角格子开始按从左到右从上到下的次序将1到
的值往方阵中赋但遇到值为0时跳过;再从右下角格子开始按从右到左从下到上的次序将1到
的值往方阵中赋但遇到值为1时跳过。
(3)当
为单偶数时,即
2(2m1)时,算法为:把
阶模仿阵先均分为ABCD四个同样的小方阵,先按先前奇数阶魔方的形成方法在
ABCD中构成四个奇阶魔方,其中,A用1到
2
2填写;B用
2
21到2
2
2填写;C用2
2
21到3
2
2填写;D用3
2
21到
填写。先在A的中间一行从左侧的第二列起取m个格子,把这些格子中的数字同D相应格子中的数字对调;然后,在C中从最后一列起在各行中取m1个格子,把这些格子中的数字同B相应格子中的数字对调。具体实现时:设ABCD四个二维数组,对于A调用形成奇阶魔方的函数array_poi
terjishui
t
i
tmatrix1100,将A用1到
2
2排成魔方阵。BCD魔方阵有个特点就是分别在前一个魔方阵中各个数字上加
2
2所构成的新魔方阵,则设了一个实现此功能的函数array_poi
terfirsti
t
i
tA2100i
tB2100。然后,采用引用的方法设了一个实现相应位置上函数交换的函数voidswapi
twi
tv。最后,将四个小方阵联结起r