3阶魔方阵的全部解法
#include "stdio.h "
main()
{
int a[3][3] = {0};
int b[9] = {0};
int m,n;
int i,j;
int Count = 0;
int k;
a[1][1] = 5;
for(b[0] = 1; b[0] <= 9; b[0]++)
{
if(b[0] == 5) b[0]++;
for(b[1] = 1; b[1] <= 9; b[1]++)
{
if(b[1] == 5) b[1]++;
for(b[2] = 1; b[2] <= 9; b[2]++)
{
if(b[2] == 5) b[2]++;
for(b[3] = 1; b[3] <= 9; b[3]++)
{
if(b[3] == 5) b[3]++;
for(b[4] = 1; b[4] <= 9; b[4]++)
{
if(b[4] == 5) b[4]++;
for(b[5] = 1; b[5] <= 9; b[5]++)
{
if(b[5] == 5) b[5]++;
for(b[6] = 1; b[6] <= 9; b[6]++)
{
if(b[6] == 5) b[6]++;
for(b[7] = 1; b[7] <= 9; b[7]++)
{
if(b[7] == 5) b[7]++;
Count = 0;
k = 0;
for(m = 0;m < 9;m++)
for(n = m + 1;n < 9;n++)
{
if(b[m] != b[n])
Count++;
}
if(Count == 36)
{
for(i = 0;i < 3;i++)
for(j = 0;j < 3;j++)
{
if(i == 1 && j == 1)j++;
a[i][j] = b[k++];
}
if(a[0][0] + a[0][1] + a[0][2] == 15)
if(a[2][0] + a[2][1] + a[2][2] == 15)
if(a[0][0] + a[1][0] + a[2][0] == 15)
if(a[0][2] + a[1][2] + a[2][2] == 15)
if(a[1][0] + a[1][2] == 10)
if(a[0][0] + a[2][2] == 10)
if(a[0][1] + a[2][1] == 10)
if(a[2][0] + a[0][2] == 10)
{
for(i = 0;i < 3;i++)
{
for(j = 0;j < 3;j++)
{
printf( "%2d ",a[i][j]);
}
printf( "\n ");
}
printf( "\n ");
}
}
}
}
}
}
}
}
}
}
getch();
}
请问一下要如何把代码优化呢,循环多了处理起来好慢,要能够求出全部的解,
[解决办法]
3阶的话求出一组解,然后第一排和三排交换,
第一列和第三列交换.这样就有4组 解了.