C++求所有的三阶魔方阵(深度优先探索)

来源:互联网 发布:淘宝卖家能延长收货吗 编辑:程序博客网 时间:2024/06/05 15:17
#include <iostream>#define DefaultSize 9using 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    --------------------


1 1