情况?
我想了几天了,编的程序越弄越复杂,大家帮忙看看怎么弄比较好啊?
我编了一个简陋的3*3的程序:
// 一个3*3的幻方的程序!
#include<iostream>
#include<algorithm>
using namespace std;
const N=3;
const M=15;
bool Row(int A[N][N]);
bool File(int B[N][N]);
bool Bias(int C[N][N]);
void main()
{
int A[N][N];
int a[N*N]={1,2,3,4,5,6,7,8,9}; //9个数的全排列!!!!
while(next_permutation(a,a+N*N))
{//----------------------------------------------------begin!!!!!!!!!!!!
for(int i(0);i<N;i++)
for(int j(0);j<N;j++)
{
A[i][j]=a[i*(N-1)+(i+j)];
if((i*(N-1)+(i+j)+1)%(N*N)==0)
{
if(Row(A) && File(A) && Bias(A))
{
for(int i(0);i<N;i++)
for(int j(0);j<N;j++)
{
cout<<A[i][j]<<" ";
if(j==N-1)
cout<<endl;
}
cout<<endl;
cout<<endl;
}
}
}
}//-----------------------------------------------------end!!!!!!!!!!!
cout<<endl<<"查找结束!"<<endl;
}
///////////////////////////////////////////////////////////////////////////////////////////
bool Row(int A[N][N]) //检验行满足要求!
{
int x(1);
int Sum1[N]={0,0,0};
for(int i(0);i<N;i++)
{
for(int j(0);j<N;j++)
Sum1[i]+=A[i][j];
if(Sum1[i]!=M)
{
x=0;
break;
}
}
if(x)
return true;
else
return false;
}
bool File(int B[N][N]) //检验列满足要求!
{
int x=1;
int Sum2[N]={0,0,0};
for(int i(0);i<N;i++)
{
for(int j(0);j<N;j++)
Sum2[i]+=B[j][i];
if(Sum2[i]!=M)
{
x=0;
break;
}
}
if(x)
return true;
else
return false;
}
bool Bias(int C[N][N]) //检验对角满足要求!
{
int a(0),b(0);
for(int i(0);i<N;i++)
{
a+=C[i][i];
b+=C[i][N-1-i];
}
if(a==M && b==M)
return true;
else
return false;
}
///////////////////////////////////////////////////////////////////////////////////////
问题是:用此方法编4*4时,不能执行了!
还请高手看看,指导一下啊
谢了!