资源描述:
《魔方阵算法分析》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、魔方阵算法2008-11-2217:12幻方问题分为奇幻方和偶幻方。奇幻方和偶幻方方阵的布阵规律不同,而偶幻方又分为是4的倍数(如4,8,12,16,20等)和不是4的倍数(如6,10,14,18等)两种。现在就幻方的三种情形的布阵规律分别加以介绍。A方案1、奇幻方N=2*M+1(M=l,2,3,……)的布阵规律a、把1放在N*N方阵中的笫一•行中间一列,即放在位置为(1,(N+l)/2);b、后一个数存放的行数比前一个数存放的行数减1,若这个行数为0,则取行数为N;c、示一个数存放的列数比前一个数存放的
2、列数加1,若这个列数为N+1,则取列数为1;(1、如果前一个数是N的借数,则后一个数存放的列数不变,而行数加1。B方案⑴将1放在第一行中间一列;⑵从2开始直到nxn止各数依次按下列规则存放;每一个数存放的行比前一个数的行数减1,列数加1(例如上面的三阶魔方阵,5在4的上一行后一列);⑶如果上一个数的行数为1,则下一个数的行数为n(指最下一行);例如1在第一行,贝屹应放在最下一•行,列数同样加1;⑷当上一个数的列数为n吋,下一个数的列数应为1,行数减去1。例如2在第3行最后一列,则3应放在第二行笫一列;⑸如
3、果按上面规则确定的位置上已有数,或上一个数是笫一行笫n列时,则把下一个数放在上一个数的卞面。例如按上血的规定,4应该放在第1行笫2列,但该位置已经被占据,所以4就放在3的下面;2、①偶幻方N=4*(M=l,2,3,……)的布阵规律先将1至N*N由小到人的顺序,从第一行开是依序填入N*N的方阵中,然后将N*N的方阵以4行4列划分为若十个4M的小方阵,再将所冇4*4小方阵的两个对角线上的数字划掉,Z后将所有被划掉的数字重新由大到小的进行排列,然后再将这些数字按排列顺序由N*N方阵的第一行开始,放入被划掉的格子
4、中去。则此时的偶幻方也就布好阵。2、②偶幻方N二4*(M=l,2,3,)的布阵规律本法先將數字順序填入方陣Z後,再施以兩階段的翻轉,一次縱向、一次横向,故名雙向翻轉法。本法僅能填製4k階的魔方陣,其填製方法共分三步驟:第一步:將數字由左而右、由上而下順序填入方陣。第二步:將中央部分半數的列,所冇败字左右翻轉。第三步:將中央部分半數的行,所冇數字上下翻轉。3、偶幻方N=2*(2*M+1)(M=l,2,3,)的布阵规律先将N*N的方阵划分为2*2的四个小方阵,设为A,B,C,D,则这四部分都正好是奇行奇列的方
5、阵,设每个小方阵为UP,其中U=N/2o然后将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的第一列对应位置的元素(出各自的中I'可一行外)进行交换:b、将A和D的中间一列的中间一行的元素进行交换;c、如果(U+1)/2>2,则将A和D中左边的第二列开始到第(U-1)/2列为止,对应行的数字全部进行交换,同时将B和C右边第一列起连续(U-1)/2-1列对英航的数字也
6、全部进行交换。下而是两种方法的代码:A#includevoidmain(){inta[16][16];inti,j,k,p,m,n;严初始化*/P=l;while(p==l){printf("请输入n.(07、j=n/2+l;a[l][j]=l;fbr(k=2;k<=n*n;k++){i=i-l;j二j+1;if((in)){i=i+2;)else{if(in)j二1;)if(a[i]U]==O)a[i]
8、j]=k;else{i二i+2;j=H;a[i]
9、j]=k;}}/*输出*/for(i=l;i<=n;i++){for(j=l;j<=n;j++)piintf(“%5cT,a[i][j]);printf(,,H);B/*全局定义方阵行、列、阶数以及最大方阵容量勺/*
10、建立魔方阵*/#includeinti,j,n,a[16][16];voidcreat(){intk;j=n/2+1;a[l][j]=l;fbr(k=2;k<=n*n;k++)j=j+l;if((in))i二i+2;elseif(in)j=l;if(a[i]
11、j]==O)a[i]U]=k;elsei=i+2;j=H;a[i][j]=k;voidprint()/*输出魔方