Sample Output
1
0
#include<iostream> #include<algorithm> using namespace std; const int len=10; int a[len][len]; int b[len][len]; int cc[len][len]; int dd[len][len]; int ee[len][len]; int n,cnt; void init() { for ( int i=1; i<=n; i++ ) { for ( int j=1; j<=n; j++ ) { a[i][j]=j; b[i][j]=j; cc[i][j]=0; } } } int ok ( int r,int c,int k,int fla ) { if ( fla ) { if ( cc[a[r][c]][b[r][k]] ) return 0; for ( int i=1; i<r; i++ ) { if ( b[i][c]==b[r][k] ) return 0; } } else { for ( int i=1; i<r; i++ ) { if ( a[i][c]==a[r][k] ) return 0; } } return 1; } void backtrack ( int r,int c ) { for ( int i=c; i<=n; i++ ) { if ( ok ( r,c,i,0 ) ) { swap ( a[r][c],a[r][i] ); for ( int j=c; j<=n; j++ ) { if ( ok ( r,c,j,1 ) ) { swap ( b[r][c],b[r][j] ); cc[a[r][c]][b[r][c]]=1; if ( c==n ) { if ( r==n ) { cnt++; } else backtrack ( r+1,1 ); } else backtrack ( r,c+1 ); cc[a[r][c]][b[r][c]]=0; swap ( b[r][c],b[r][j] ); } } swap ( a[r][c],a[r][i] ); } } } int main() { while ( cin>>n ) { cnt=0; init(); backtrack ( 1,1 ); cout<<cnt<<endl; } return 0; }