各阶幻方的构造算法

<?xml version="1.0" encoding="utf-8"?> 各阶幻方的构造算法

各阶幻方的构造算法

奇数阶幻方

拉-卢贝尔算法

这个算法又称“阶梯法”。算法如下:

  1. 将1置于第一行中间。
  2. 将下一个数字置于当前数字的右上角。如果已经处于方阵的边界,则放在方阵的对边(如图1中的2和4)。
  3. 若出现下面两种情况,则将下一个数字放于当前数字的下方:
    • 当前位置的右上角已经有一个数字(如图2中的6和11)。
    • 当前位置已经是方阵的右上方(如图2中的16)。
  4. 结束,如图3.

https://images0.cnblogs.com/blog/237623/201302/22114911-747f1a0906cf4a0186581c8a21d78ddc.jpg

拉-卢贝尔算法

菱形算法

另一种由康韦(J.H.Conway)建立的算法被称为“菱形算法”,步骤如下(以5x5为例):

  1. 从左边中间开始,将奇数在方阵内填成一个菱形。
  2. 将方阵分成5条对角线,每条对角线上有5个方格。如果图1所示。
  3. 从第一条对角线开始将偶数填入剩余的空格内,图2中填满了前两条对角线。
  4. 结束,如图3。

https://images0.cnblogs.com/blog/237623/201302/22114911-02d577455d3c42818b8d612b49b9a003.jpg

菱形算法

单偶数阶幻方

侓克斯算法

这个算法也是由康韦给出的。思想是将方阵分成多个2x2的小方阵,小方阵按照位置分成L、U、X三种类型。然后在大体上按照卢-拉贝尔算法来走,在每个小方阵中根据小方阵的类型来填数。具体算法如下:

  1. 将方阵分成(2i+1)个(2x2)的小方阵,小方阵的分类这样确定:前i+1行是L类型,后面一行是U类型,最后的i-1行是X类型,然后交换第i+1行和第i+2行中间小方阵的类型。对于10x10的方阵如图1。
  2. L、U、X的填法如图2。
  3. 最终结果如图3。

https://images0.cnblogs.com/blog/237623/201302/22114912-94a38646c0c545b78c872ab21dc4f11a.jpg

LUX算法

加法算法

将一个幻方加上另外一个幻方所得的和仍然具有幻方的特性,只是可能会有重复项,这是幻方的加法特性。下面的方法就是根据这个特性设计的,首先建立两个方阵A、B,具有幻方的特性(横、纵、斜和相同),然后让A加上B的i倍,就得到一个幻方。假如我们要作一个4i+2阶幻方(此处以14为例)。具体算法如下:

  1. 先作一个14(4i+2)阶的方阵A,这个方阵分成4个7(2i+1)阶小方阵,每个小方阵是一个奇数阶的幻方,奇数阶幻方构造方法已经有了。如图1。
  2. 再作一个14(4i+2)阶的方阵B,这个方阵只由0、1、2、3构成,具体作法如下:
    1. 第一列:3(i)个3,4(i+1)个0,5(i+2)个2,2(i-1)个1
    2. 前7(2i+1)列与都与第一列相同,只有第4(i+1)列例外,该列第一个3和第一个0交换位置。
    3. 后7(2i+1)列与前7(2i+1)列相同,不过3和0交换,1和2交换。
    4. 结果如图2。
  3. 构造幻方C=A+i2B。如图3,C即所求。

https://images0.cnblogs.com/blog/237623/201302/22114913-64dd1a610701414f9b6034235e71b613.jpg

加法算法

替代算法

这个是最难的一个。对于2i+2的幻方(以6为例):

  1. 将幻方分成A、B、C、D、E、F、G、H和I几个区,如图1。
  2. 类似于双偶数阶幻方的分割算法,将处于上述分区中的格子填数,如图2。
  3. 然后在空格上(i+1和3i+1行列)填上数,如图3。

https://images0.cnblogs.com/blog/237623/201302/22114913-425401504a5747d883475d7932b18d39.jpg

替代算法

好吧,太难了,中译本翻译得又很不清楚,不写了,等有机会看到更好的版本再加上。

双偶数阶幻方

分割算法

  1. 将方阵分成16个小方阵,如图1。
  2. 先在A、C、E、G、I方阵中填入数字,其他方阵跳过,如图2。
  3. 再逆序(从右下往左上)赶往余下的数字,如图3。
  4. 结束,如图3

https://images0.cnblogs.com/blog/237623/201302/22114913-b17ffd9c657149c09c071ff3c5a588e0.jpg

分割算法

下面是一个8次的方阵:

https://images0.cnblogs.com/blog/237623/201302/22114914-c2fc3e93a48749e8aee1036d6e8edcdb.jpg

8次方阵

对角线算法

  1. 将数字顺序填入方阵内,如图1。
  2. 将方阵分成四个相同大小的方阵。并找出每个小方阵的对角线,如图1阴影部分。
  3. 将阴影部分旋转180度,如图2。

https://images0.cnblogs.com/blog/237623/201302/22114915-ec900fba8b0144a2ae15ee77933ada70.jpg

对角线算法

Date: 2012-12-06 四

Author: Hu Wenbiao

Org version 7.8.11 with Emacs version 24

Validate XHTML 1.0

转载于:https://www.cnblogs.com/Open_Source/archive/2013/02/22/2922031.html

  • 4
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值