战神的崛起全英雄:魔方阵的算法,用c来实现,多种方法的都可以

来源:百度文库 编辑:高考问答 时间:2024/05/04 16:53:06
魔方阵的算法,用c来实现,多种算法的都可以,最优算法的最好。呵呵
算法后要求有一些说明,否则看不懂,呵呵

二楼的,这个算法我也搜到了,能说说里面算法的原理吗?
谢谢

main()
{ int a[19][19],i,j,k,m,n,p;
p=1;
while(p==1)
{ printf("\n\n The program of print a 19*19 bewitching phalanx\n\n");
printf("Enter n (n is a odd number from 1 to 19):> ");
scanf("%d",&n);
if((n!=0)&&(n<=19)&&(n%2==1))
p=0;
}
for(i=0;i<n;i++)
for(j=0;j<n;j++)
a[i][j]=0;
j=n/2;
a[0][j]=1;
for(k=2;k<=n*n;k++)
{ i=i-1;
j=j+1;
if((i<0)&&(j>n-1))
{ i=i+2;
j=j-1;
}
else
{ if(i<0)
i=n-1;
if(j>n-1)
j=0;
}
if(a[i][j]==0)
a[i][j]=k;
else
{ i=i+2;
j=j-1;
a[i][j]=k;
}
}
printf("\n");
for(i=0;i<n;i++)
{ for(j=0;j<n;j++)
printf("%4d",a[i][j]);
printf("\n");
}
printf("\nThank you to use the program ! Pass any key to exit ...");
delay(20);
getch();
}

从穷举搜索法搜索所有可能的路径

前面算法是这样的,证明出处不详
1.先将1放在第一行的中间位置。
2.从“2”开始直到N*N止,各数依次按下列规则放数:每个数放的行在前一个数的行数减1,列数加1.
3.如果上一个数的行数为1,则下一个数的行数为最后一行。当上一个数的列数为最后一列时,下一个列数为第一列。
4.如果下一个数应放的位置已被占,则下一个数放在上一个数的下面。

建议安装一个matlab。然后从帮助中搜索magic()函数。。
里面有任意阶幻方的算法