#include <iostream> #define DefaultSize 9using namespace Std;class grial{public:grial (int sz=defaultsize) {visted = new bool [SZ];d ata = 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;}
The result is:
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 --------------------
C + + to find all three-order magic matrices (depth first exploration)