| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 21418 人关注过本帖, 10 人收藏
标题:求魔方阵的十种算法
只看楼主 加入收藏
取消关键字高亮
swehenry
Rank: 2
等 级:论坛游民
帖 子:45
专家分:14
注 册:2007-11-11
收藏
得分:0 
方法八:

/*此程序可以运行3阶到15阶奇数阵*/
#include<stdio.h>
#define N 15

int main(void)
{
int i,j,row,cloum,size,square[N][N],count;
printf("please enter the square size(odd && <=15):\n");
scanf("%d",&size);
while(size%2==0||size>15||size<3)
{
printf("error due to the wrng input!please input it again!\n");
scanf("%d",&size);
}
for(i=0;i<size;i++)
for(j=0;j<size;j++)
square[i][j]=0;
i=0;
j=(size-1)/2;
square[i][j]=1;
for(count=2;count<=size*size;count++)
{
row=i-1<0?(size-1):(i-1);
cloum=j-1<0?(size-1):(j-1);
if(square[row][cloum])
i=(++i)%size;
else
{
i=row;
j=j-1<0?(size-1):(j-1);
}
square[i][j]=count;
}
printf("the %d square is:\n",size);
for(i=0;i<size;i++)
{
for(j=0;j<size;j++)
printf("%5d",square[i][j]);
printf("\n");
}

getchar();
getchar();
return 0;
}
2008-03-19 22:51
swehenry
Rank: 2
等 级:论坛游民
帖 子:45
专家分:14
注 册:2007-11-11
收藏
得分:0 
方法九:

/*此程序由行矩阵、列矩阵和自然矩阵计算魔方阵的,可以运行到359阶魔方阵*/
#include "stdio.h"
#define N 7    /*这里可以修改最大阶*/
main()
{
int col[N][N],row[N][N];
int i,j;
/*求行矩阵*/
for(i=0;i<N;i++)
{
for(j=0;j<N;j++)
{
col[i][j]=(-1)*i+j+(N+1)/2;
if(col[i][j]>N)
col[i][j]-=N;
if(col[i][j]<1)
col[i][j]+=N;
}
}
/*求列矩阵*/
for(i=0;i<N;i++)
{
for(j=0;j<N;j++)
{
row[i][j]=col[i][N-j-1];
}
}
/*由行矩阵、列矩阵和自然矩阵计算魔方阵*/
for(i=0;i<N;i++)
{
for(j=0;j<N;j++)
{
printf("%5d",(col[i][j]-1)*N+row[i][j]);
}
printf("\n");
}
}
2008-03-19 22:52
swehenry
Rank: 2
等 级:论坛游民
帖 子:45
专家分:14
注 册:2007-11-11
收藏
得分:0 
方法十:

/*此程序可以求3到19阶的魔方阵*/
#include <stdio.h>
main()
{
int i,j,n,k,p,q,t,sum,a[20][20]={0};
printf("Please input N:\n");
scanf("%d",&n);
sum=n*(n*n+1)/2;
t=n;
if(n<3||n>20)
printf("The number is out of range.");
else if(n%2!=0) /* According to the De La Loubere's Method for odd level Rubik Cube */
{
k=1;
i=0;
j=(n-1)/2;
while(k<=n*n)
{
while(a[i][j]==0)
{
a[i][j]=k;
k++;
if(i==0)
i=n-1;
else i=i-1;
if(j==n-1)
j=0;
else j=j+1;
}
if(i==n-1)
i=1;
else i=i+2;
if(j==0)
j=n-1;
else j=j-1;
}
}
else {
if(n%4!=0) /* According to the Yanghui's Extended Method for quadruple level Rubik Cube */
n-=2;
p=2;
q=n*n+1;
for(i=1;i<=n;)
{
while(i%4==0||i%4==1)
{
if(i%4==0)
{
p+=2;
q+=1;
}
else q-=1;
a[i][1]=q;
q-=3;
for(j=3;j<=n;j+=4)
{
a[i][j-1]=p;
a[i][j]=p+1;
p+=4;
}
for(k=4;k<n;k+=4)
{
a[i][k]=q;
a[i][k+1]=q-1;
q-=4;
}
a[i][k]=q;
i+=1;
}
while(i%4==2||i%4==3)
{
if(i%4==2)
{
p-=1;
q-=2;
}
else p+=1;
a[i][1]=p;
p+=3;
for(j=4;j<n;j+=4)
{
a[i][j]=p;
a[i][j+1]=p+1;
p+=4;
}
for(k=3;k<=n;k+=4)
{
a[i][k-1]=q;
a[i][k]=q-1;
q-=4;
}
a[i][j]=p;
i+=1;
}
}
if(t%4!=0) /* According to the Expand Level Method for single even level Rubik Cube */
{
n+=2;
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
a[i][j]+=2*n-2;
a[0][0]=n*n-n;
a[n-1][n-1]=n+1;
a[n-1][0]=n;
a[0][n-1]=n*n-n+1;
for(k=1;k<=(n/2-1);k++)
{
a[2*k-1][0]=2*k;
a[2*k][0]=n*n-2*k;
a[0][2*k-2]=n*n-n-2*k+2;
a[0][2*k-1]=n+2*k;
}
a[1][0]=n*n-1;
a[n/2][0]=1;
a[n/2+1][0]=n/2+2;
a[0][n-2]=n/2+1;
for(k=1;k<n-1;k++)
{
a[n-1][k]=n*n+1-a[0][k];
a[k][n-1]=n*n+1-a[k][0];
}
}
}
if(n>=3&&n<=20)
{
if(n%4!=0)
{
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
printf("%3d ",a[i][j]);
putchar('\n');
}
}
else {
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
printf("%3d ",a[i][j]);
putchar('\n');
}
}
printf("The sum of the numbers in every row, column and diagonal is %d.\n",sum);
}
}
2008-03-19 22:53
bianfeng
Rank: 1
等 级:新手上路
帖 子:199
专家分:0
注 册:2007-11-28
收藏
得分:0 
好,顶一下,学习了
2008-03-20 00:03
永夜的极光
Rank: 6Rank: 6
等 级:贵宾
威 望:27
帖 子:2721
专家分:1
注 册:2007-10-9
收藏
得分:0 
不错不错,赞一下,是否楼主原创?是的话建议加精

从BFS(Breadth First Study)到DFS(Depth First Study)
2008-03-20 08:06
雨中飞燕
Rank: 3Rank: 3
等 级:禁止访问
威 望:8
帖 子:2200
专家分:0
注 册:2007-8-9
收藏
得分:0 
奇数阶的写得太过于复杂,LZ看看我的文章吧
2008-03-20 08:11
shilei525918
Rank: 1
等 级:新手上路
帖 子:18
专家分:0
注 册:2007-1-2
收藏
得分:0 
不错
2008-03-20 11:27
冰燃
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2008-2-23
收藏
得分:0 
学习了
2008-03-20 20:09
swehenry
Rank: 2
等 级:论坛游民
帖 子:45
专家分:14
注 册:2007-11-11
收藏
得分:0 
回复 15# 的帖子
这个帖子是我昨天晚上写的,此前还在论坛写了个求助的帖子,感觉虽然网上介绍的方法很多,如果能总结一下就可以更方便大家学习了,前面介绍魔方阵的资料和大多数程序是在网上找到的,经过整理后,我把每个程序都在vc 6.0上做了一下测试,然后把可以成功运行的都发出来了,测试结果和程序的功能在每个程序的开头都是有注释的。

[[it] 本帖最后由 swehenry 于 2008-3-20 23:51 编辑 [/it]]
2008-03-20 23:39
wybxnlpb
Rank: 2
等 级:论坛游民
帖 子:6
专家分:10
注 册:2010-7-14
收藏
得分:0 
很好,很强大。。喜欢你这样爱专研的人啊  人才啊  。。。
2010-07-23 10:26
快速回复:求魔方阵的十种算法
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.025165 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved