Algorithm 版 (精华区)

发信人: fobcaesar (温泉企鹅)〓(缥缈的金星), 信区: Algorithm
标  题: 幻方问题的算法详解
发信站: 哈工大紫丁香 (2002年08月17日13:28:45 星期六), 站内信件

幻方问题分为奇幻方和偶幻方。奇幻方和偶幻方方阵的布阵规律不同,而偶幻方又分为
是4的倍数(如4,8,12,16,20等)和不是4的倍数(如6,10,14,18等)两种。现在
就幻方的三种情形的布阵规律分别加以介绍。

1、奇幻方 N=2*M+1(M=1,2,3,……)的布阵规律
a、把1放在N*N方阵中的第一行中间一列,即放在位置为(1,(N+1)/2);
b、后一个数存放的行数比前一个数存放的行数减1,若这个行数为0,则取行数为N;
c、后一个数存放的列数比前一个数存放的列数加1,若这个列数为N+1,则取列数为1;
d、如果前一个数是N的倍数,则后一个数存放的列数不变,而行数加1。

2、偶幻方N=4*(M=1,2,3,……)的布阵规律
先将1至N*N由小到大的顺序,从第一行开是依序填入N*N的方阵中,然后将N*N的方阵以4
行4列划分为若干个4*4的小方阵,再将所有4*4小方阵的两个对角线上的数字划掉,之后
将所有被划掉的数字重新由大到小的进行排列,然后再将这些数字按排列顺序由N*N方阵
的第一行开始,放入被划掉的格子中去。则此时的偶幻方也就布好阵了。

3、偶幻方N=2*(2*M+1)(M=1,2,3,……)的布阵规律
先将N*N的方阵划分为2*2的四个小方阵,设为A,B,C,D,则这四部分都正好是奇行奇
列的方阵,设每个小方阵为U*U,其中U=N/2。然后将1至U*U按奇幻方的的方式填入小方
阵A中,同理填入U*U+1至U*U*2到B中,填入U*U*2+1至U*U*3到C中,填入U*U*3+1至U*U*4
到D中。然后按下列方法交换:
a、将A和D的第一列对应位置的元素(出各自的中间一行外)进行交换;
b、将A和D的中间一列的中间一行的元素进行交换;
c、如果(U+1)/2>2,则将A和D中左边的第二列开始到第(U-1)/2列为止,对应行的数
字全部进行交换,同时将B和C右边第一列起连续(U-1)/2-1列对英航的数字也全部进行
交换。


--
かつて、純潔な愛が俺の前に置いていたが、大切にしていなかった。
あの愛を失った時
どんなに後悔したか、分かってきた!世の中に一番つらいことは、
これしかないと思う。
お前の剣が、俺の喉から切ってくれよ!もう猶予しないぞ!もし、神様から、
もう一度やらせる機会……

※ 来源:·哈工大紫丁香 bbs.hit.edu.cn·[FROM: 天外飞仙]
[百宝箱] [返回首页] [上级目录] [根目录] [返回顶部] [刷新] [返回]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:4.830毫秒