const int MX = 100 ; int queen[ MX ] ; // queen[i] for ith row queen int column[ MX ] , diagonal1[ MX + MX ] , diagonal2[ MX + MX ] ; // always double from column int total ; // It will determine the total number of solution // call with nqueen( 1 , 8 ) for 8 queen problem // make sure column [ MX ] , diagonal1[ MX + MX ] , diagonal2[ MX + MX ] are all initially 0 int nqueen( int now , int n ) { if( now == n + 1 ) // complete { total += 1 ; // count total unique solution printf(" ( row , column ) " ); for ( int i = 1 ; i <= n ; i++ ) { printf("(%d , %d) " , i , queen[i] ); } printf("\n"); return ; } for ( int i = 1 ; i <= n ; i++ ) { if( column[i] || diagonal1[ i + now ] || diagonal2[ n + i - now ] ) continue ; // As i - now can be negative thats why we are adding n queen[ now ] = i ; // position of column column[i] = diagonal1 [ i + now ] = diagonal2 [ n + now - i ] = 1 ; nqueen( now + 1 , n ); column[i] = diagonal1 [ i + now ] = diagonal2 [ n + now - i ] = 0 ; } }