幻方构造(三) | 寒山烟雨
现在的位置: 首页 > 小试身手 > 正文

幻方构造(三)

2012年05月16日 小试身手 ⁄ 共 1603字 ⁄ 字号 评论 3 条 ⁄ 阅读 4,897 views 次

话不多说,书接上回。拖延良久之后,单偶数幻方的LUX方法新鲜出炉。之前说过,单偶阶幻方的构造是最麻烦的,一般没有直接法。而然,难者不会,会者不难,经过一系列的摸索与研究,终于明白lux方法的大致原理,相比于其他方法虽然算法简明但过程繁琐。

单偶阶幻方的LUX构造步骤如下:

1.对于(2M+2)阶幻方,先排出(2M+1)阶幻方。

2.在前M+1行上,属性值标记为L,M+1行中间的标记为U;在第M+2行上,属性值标记为U,中间的标记为L;其余标记为X。

3.将(2M+1)阶幻方中每个元素k扩展为2*2的矩阵[[k,k],[k,k]],将矩阵乘以4然后减去4.

4.属性为L的矩阵,做如下处理:[[k+4,k+1],[k+2,k+3]];属性为U的矩阵,做如下处理:[[k+1,k+4],[k+2,k+3]],.属性为X的矩阵,做如下处理:[[k+1,k+4],[k+3,k+2]。

构造完成。

 Python | 
 
 copy code |
?

1
#!/usr/bin/env<!--DVFMTSC--> python3
2
#单偶阶幻方

k=int(input("请输入一个单偶数(k<18):"))

n=k//2

Magic=[([0]*n)for i in range(n)]
i=0
j=(n−1)//2
Magic[i][j]=1
for m in range(2,n*n+1,1):
    i0=i
    j0=j
    i=(i+n−1)%n
    j=(j+n+1)%n
    if Magic[i][j]!=0:
        i=(i0+n+1)%n
        j=j0
    if i0==0 and j0==n−1:
        i=1
        j=n−1
    Magic[i][j]=m

Even=[([0]*k)for i in range(k)]

for i in range(0,k,2):
    for j in range(0,k,2):
        i0=i//2
        j0=j//2
        if i<=n−2 or (i==n−1 and j!=(n−1)//2+2) or (i==n+1 and j==(n−1)//2+2):
            Even[i][j]=4*Magic[i0][j0]
            Even[i][j+1]=Even[i][j]−3
            Even[i+1][j]=Even[i][j]−2
            Even[i+1][j+1]=Even[i][j]−1
        else:
            if (i==n−1 and j==(n−1)//2+2) or (i==n+1 and j!=(n−1)//2+2):
                Even[i][j]=4*Magic[i0][j0]−3
                Even[i][j+1]=Even[i][j]+3
                Even[i+1][j]=Even[i][j]+1
                Even[i+1][j+1]=Even[i][j]+2
            else:
                Even[i][j]=4*Magic[i0][j0]−3
                Even[i][j+1]=Even[i][j]+3
                Even[i+1][j]=Even[i][j]+2
                Even[i+1][j+1]=Even[i][j]+1

for i in range(k):
    for j in range(k):
        print("%3d"%Even[i][j],end=' ')
    print()
input("Press <Enter> to end")

0
【上篇】
【下篇】

目前有 3 条留言    访客:3 条, 博主:0 条

  1. ixwebhosting 2012年05月23日 上午8:22  @回复  Δ-49楼 回复
    Google Chrome Google Chrome Windows Windows

    好深奥的,不是太懂的,来好好学学

  2. 冷轩信 2012年05月17日 下午10:48  @回复  Δ-48楼 回复
    Google Chrome Google Chrome Windows Windows

    而然……
    我把lux看成linux了

  3. YeLee 2012年05月17日 下午10:40  @回复  Δ-47楼 回复
    Firefox Firefox GNU/Linux GNU/Linux

    码盲飘过。

给我留言

留言无头像?


×