Untitled
Never
//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)); } }