Untitled

                Never    
C
       
//12604 - N-Queens M-Rooks Problem   
#include <stdio.h>

int chess[10][10];
int n, m;

void print(void){
    for(int i = 0; i < n+m; i++){
        for(int j = 0; j < n+m; j++){
            printf("%d", chess[i][j]);
        }
        printf("\n");
    }
    printf("\n");
}

int valid(int row, int level, int type){
    if(level - 1 < 0) return 1;
    for(int i = level-1; i >= 0; i--){
        for(int j = 0; j < n+m; j++){
            if(chess[i][j] && type == 1){
                if(row == j) return 0;
                if((row - level) == (j - i)) return 0;
                if((row + level) == (j + i)) return 0;
            }
            else if(chess[i][j] == 2){
                if(j == row) return 0;
            }
        }
    }
    return 1;
}

int solve(int q, int r, int level){

    int ans = 0;
    if(level == n+m){
        print();
        return 1;
    }
    
    for(int i = 0; i < n+m; i++){
        if(valid(i, level, 1)){
            if(q-1 >= 0){
                chess[i][level] = 1;
                ans += solve(q-1, r, level+1);
                chess[i][level] = 0;
            }
        }
        if(valid(i, level, 2)){
            if(r-1 >= 0){
                chess[i][level] = 2;
                /*for(int i = 0; i < n+m; i++){
                    for(int j = 0; j < n+m; j++){
                        printf("%d", chess[i][j]);
                    }
                    printf("\n");
                }
                printf("\n");*/
                ans += solve(q, r-1, level+1);        
                chess[i][level] = 0;
            }
        }
    }
    return ans;
}

int main(){

    while(scanf("%d%d", &n, &m) != EOF){

        for(int i = 0; i < n+m; i++){
            for(int j = 0; j < n+m; j++){
                chess[i][j] = 0;
            }
        }
        
        printf("%d\n", solve(n, m, 0));
    }
}

Raw Text