}
}
voidsquare(inta[][10],intk,intn)
{
inti,j;
for(i=1,j=0;i<=n*n;i++,j--,k++)//n为阶数,从1开始给数组赋值
{
if(j<0&&k>=n)//当数组行列都越出范围时候,确定数组正确位置
{
j+=2;k-=1;
}
elseif(j<0)//当数组行越出范围时候,确定数组正确位置
j+=n;
elseif(k>=n)//当数组列越出范围时候,确定数组正确位置
k-=n;
elseif(a[j][k]!
=0)//当数组原位置有数时候,确定数组位置
{
j+=2;k-=1;
}
a[j][k]=i;
}
}
//方法二:
输出N介魔方阵所有魔方阵。
#include
#include
#include
usingnamespacestd;
voidprintA(int**p,intn)//输出这个n阶魔方阵
{
cout<"<inti,j;
for(i=0;i{
for(j=0;j{
cout<}
cout<}
cout<}
boolJudge(int**p,intn)//判断是否为n阶魔方阵
{
inti,j,sum=0,NowSum=0;
boolYesOrNo=true;
for(j=0;j{
sum+=p[0][j];
}
for(i=1;i{
NowSum=0;
for(j=0;j{
NowSum+=p[i][j];
}
if(NowSum!
=sum)
{
YesOrNo=false;
gotoEND;
}
}
for(i=0;i{
NowSum=0;
for(j=0;j{
NowSum+=p[j][i];
}
if(NowSum!
=sum)
{
YesOrNo=false;
gotoEND;
}
}
NowSum=0;
for(i=0,j=0;i{
NowSum+=p[i][j];
}
if(NowSum!
=sum)
{
YesOrNo=false;
gotoEND;
}
NowSum=0;
for(i=n-1,j=0;i>=0,j{
NowSum+=p[i][j];
}
if(NowSum!
=sum)
{
YesOrNo=false;
gotoEND;
}
END:
returnYesOrNo;
}
voidcombination(int**p,intn,int*a)//求m=n*n个数(1,2,3.....m)的全排列
{
intm=n*n;
staticintNum=0;
int*b_val=newint[m];
intc=0,k,i,j;
b_val[c]=-1;//一维数组首地址的值赋-1c[0]-1
while(b_val[0]{
if(++b_val[c] //b[0]0[1]0[1]1[2]0[2]1[2]2...[6]6...[7]0...[7]7[8]0...[8]8判断魔方[8]9012345678
// [7]8[8]0...[8]7判断魔方[8]8[8]9012345687
// [6]7...[7]0...[7]6 [8]8012345768
// 012345786
// 012345867...
// 876543210
{
for(k=0;kif(b_val[k]==b_val[c])