#include <iostream>
#define DefaultSize 9
using namespace std;
class Grial
{
public:
Grial(int sz=DefaultSize)
{
visted = new bool [sz];
data = new int [sz];
size = sz;
for(int i=1;i<=sz;i++)
{
visted[i]=0;
}
}
bool check(int a[])
{
if( ((data[1]+data[2]+data[3])==
(data[4]+data[5]+data[6]))&&
((data[4]+data[5]+data[6])==
(data[7]+data[8]+data[9]))&&
((data[1]+data[4]+data[7])==
(data[2]+data[5]+data[8]))&&
((data[2]+data[5]+data[8])==
(data[3]+data[6]+data[9]))&&
((data[1]+data[2]+data[3])==
(data[1]+data[5]+data[9]))&&
((data[1]+data[2]+data[3])==
(data[3]+data[5]+data[7])))
return true;
return false;
}
void Insert(int start)
{
if(start==size+1)
{
int k = 0;
if(check(data))
{
for(int i=1;i<=size;i++)
{
cout<<data[i];
k++;
if(k%3==0)cout<<endl;
}
cout<<"--------------------"<<endl;
}
}
else
{
for(int i=1;i<=size;i++)
{
if(visted[i]==0)
{
data[start]=i;
visted[i]=1;
Insert(start+1);
visted[i]=0;
}
}
}
}
private:
int size;
bool *visted;
int *data;
};
int main()
{
Grial g(9);
g.Insert(1);
return 0;
}
结果是:
2 7 6
9 5 1
4 3 8
--------------------
2 9 4
7 5 3
6 1 8
--------------------
4 3 8
9 5 1
2 7 6
--------------------
4 9 2
3 5 7
8 1 6
--------------------
6 1 8
7 5 3
2 9 4
--------------------
6 7 2
1 5 9
8 3 4
--------------------
8 1 6
3 5 7
4 9 2
--------------------
8 3 4
1 5 9
6 7 2
--------------------