#include #include #include using namespace std; bool Check(const vector& v) { int i,j,s; for (i=0;i<3;++i) { for(s=j=0;j<3;++j) s += v[i*3+j]; if (s != 15) return false; } for (i=0;i<3;++i) { for(s=j=0;j<3;++j) s += v[j*3+i]; if (s != 15) return false; } if (v[0]+v[4]+v[8] != 15) return false; if (v[2]+v[4]+v[6] != 15) return false; return true; } int main() { vector v(9); list > l; int i; for (i=0;i<9;++i) v[i] = i+1; do { if (Check(v)) l.push_back(v); } while (next_permutation(v.begin(),v.end())); list >::iterator it; for (i=0;i<3;++i) { for (it=l.begin();it != l.end();++it) { copy((*it).begin()+i*3,(*it).begin()+i*3+3 ,ostream_iterator(cout)); cout << " "; } cout << endl; } return 0; }