自己写的,穷举.笨死了.
#include<iostream>
using namespace std;
void output(int *a,int n)
{
cout<<"**************************"<<endl;
for(int i=0;i<n*n;i++)
{
cout<<a[i]<<" ";
if((i+1)%n==0)cout<<endl;
}
}
int *createArray(int n)
{
int *aa=new int[n*n];
for(int i=0;i<n*n;i++)
{
aa[i]=i+1;
}
return aa;
}
int check1(int i,int n)
{
if(i!=(n*n*n+n)/2)return 1;
else return 0;
}
int check(int *a,int n)
{
int *sum=new int[2*n+2];
int ii=0,j;
for(int i=0;i<2*n+2;i++)sum[i]=0;
for(i=0;i<n;i++)sum[ii]+=a[n*i+i];if(check1(sum[ii],n)){delete sum;return 0;}ii++;
for(i=0;i<n;i++)sum[ii]+=a[n*i+n-i-1];if(check1(sum[ii],n)){delete sum;return 0;}
ii++;
for(j=0;j<n;j++)
{
for(i=0;i<n;i++)sum[ii]+=a[n*i+j];if(check1(sum[ii],n)){delete sum;return 0;}
ii++;
for(i=0;i<n;i++)sum[ii]+=a[n*j+i];if(check1(sum[ii],n)){delete sum;return 0;}
ii++;
}
delete sum;
return 1;
}
int init(int *a,int n,int singal)
{
int i;int temp;
if(singal==n*n)
{
if(check(a,n))
{
output(a,n);
}
}
for(i=singal;i<n*n;i++)
{
temp = a[i]; a[i] = a[singal]; a[singal] = temp;
init(a,n,singal+1);
temp = a[i]; a[i] = a[singal]; a[singal] = temp;
}
return 0;
}
int main()
{
int n,*a;
cout<<"请输入n"<<endl;
cin>>n;
a=createArray(n);
init(a,n,0);
system("PAUSE");
return 0;
}