魔方阵

自己写的,穷举.笨死了.

#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;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值