Advertisement
audreych

12604 - N-Queens M-Rooks Problem

Feb 20th, 2021
71
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.23 KB | None | 0 0
  1. #include <stdio.h>
  2. int c[15], rdq[29], ldq[29], rdr[29], ldr[29];
  3. int queen, rook, result, cnt, prev;
  4.  
  5. void solve(int N, int row, int queen_cnt, int rook_cnt){
  6.     if(row == N){
  7.         result++;
  8.         return;
  9.     } else {
  10.         for(int i = 0; i < N; i++){
  11.             if(queen_cnt < queen){
  12.                 if(!c[i] && !rdq[N-1+row-i] && !ldq[row+i] && !rdr[N-1+row-i] && !ldr[row+i]){
  13.                     c[i] = rdq[N-1+row-i] = ldq[row+i] = 1;
  14.                     solve(N, row+1, queen_cnt+1, rook_cnt);
  15.                     c[i] = rdq[N-1+row-i] = ldq[row+i] = 0;
  16.                 }
  17.             }
  18.             if(rook_cnt < rook){
  19.                 if(!c[i] && !rdq[N-1+row-i] && !ldq[row+i]){
  20.                     c[i] = 2;
  21.                     rdr[N-1+row-i]+= 1;
  22.                     ldr[row+i]+=1;
  23.                     solve(N, row+1, queen_cnt, rook_cnt+1);
  24.                     c[i] = 0;
  25.                     rdr[N-1+row-i]-=1;
  26.                     ldr[row+i]-=1;
  27.                 }
  28.             }
  29.         }
  30.     }
  31.     return;
  32. }
  33. int main(){
  34.     while(scanf("%d%d", &queen, &rook) != EOF){
  35.         result = 0;
  36.         int N = queen + rook;
  37.         solve(N, 0, 0, 0);
  38.         printf("%d\n", result);
  39.     }
  40.     return 0;
  41. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement