谁有求偶数阶魔方阵的算法?
魔方阵:每一行、每一列和对角线之和都相同的方阵,n阶魔方阵的元素集为1~n*n如:8 1 6
3 5 7
4 9 2
现在奇数阶的魔方阵已经有了固定的算法,可是偶数阶不知怎么做,哪位线性代数好的提供点思路?
用了半个小时才把这个写出来,只能输出奇数阶魔方阵的一种形式,不知道每阶魔方阵是不是都可以等价为一种?
源程序如下,宏定义N是阶数:
#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");
}
}