/*
程序思想参考百度百科上"幻方法则" 2015-01-27
其实在维基百科上有更全面的,搜索Magic square即可查到,可惜太英语了,有点难,留着以后看^*^
代码环境xcode6.1 playground
几个公用函数只在第一篇显示,后面的篇章不在重复
func isMagic(s:[[Int]])->[Int]?
func printMagic(s:[[Int]])
func signed(aint: Int)->Int
func correction(k: Int, step: Int) ->Int
*/
/*
二、单偶幻方的解法
将n阶单偶幻方表示为4m+2阶幻方。将其等分为四分,成为如下图所示A、B、C、D四个2m+1阶奇数幻方。
A C
D B
A用1至(2m+1)^2填写成(2m+1)阶幻方;B用(2m+1)^2+1至2*(2m+1)^2填写成(2m+1)阶幻方;C用2*(2m+1)^2+1至3*(2m+1)2填写成(2m+1)阶幻方;D用3*(2m+1)^2+1至4*(2m+1)^2填写成(2m+1)阶幻方;
【注:(2m+1)^2是(2m+1)的平方,以下同】
8 1 6 26 19 24
3 5 7 21 23 25
4 9 2 22 27 20
35 28 33 17 10 15
30 32 34 12 14 16
31 36 29 13 18 11
[1] 在A阵中取左侧m列与D阵对应小格对调;在C阵中取右侧m-1列与B阵对应小格对调;最后在A阵中间行取中心格与左侧一格与D阵对应小格对调。
6阶幻方就是4*1+2,那么m就是1。在A中间一行取中心格1个小格,其他行左侧边缘取1个小格,将其与D相应方格内交换;B与C接近右侧m-1列相互交换(6阶幻方m-1=0,则不用互换)。如下图用Strachey法生成的6阶幻方:
35 1 6 26 19 24
3 32 7 21 23 25
31 9 2 22 27 20
8 28 33 17 10 15
30 5 34 12 14 16
4 36 29 13