Untitled
unknown
c_cpp
2 years ago
2.6 kB
6
Indexable
#include<stdio.h> #include<stdbool.h> int count; int n,m; void place(int row, int q[n+m], int a, int r[n+m], int b); bool valid(int row, int col, int q[n+m], int r[n+m]); bool valid2(int row, int col, int q[n+m], int r[n+m]); int main() { while(scanf("%d %d", &n, &m)!=EOF) { count = 0; int a,b; a=n,b=m; int q[n+m]; int r[m+n]; for(int i=0; i<n+m; i++) q[i] = -100; for(int i=0; i<m+n; i++) r[i] = -100; place(0,q,a,r,b); printf("%d\n", count); } } void place(int row, int q[n+m], int a, int r[m+n], int b) { if(row==n+m) { count++; return; } else { if(a>0) { for(int i=0; i<n+m; i++) { if(valid(row,i,q,r)) { bool ok = true; for(int j=0; j<row; j++) { if(r[j] == i) { //printf("C%d", i); ok = false; } } if(ok) { q[row] = i; place(row+1,q,a-1,r,b); } } } q[row] = -100; } if(b>0) { for(int i=0; i<n+m; i++) { bool ok = true; if(!valid2(row,i,q,r)) { //printf("A"); ok = false; } for(int j=0; j<row; j++) { if(r[j] == i) { //printf("A%d", i); ok = false; } } if(ok) { r[row] = i; //printf("B%d", i); place(row+1,q,a,r,b-1); } } r[row] = -100; } } } bool valid(int row, int col, int q[n+m], int r[n+m]) { for(int i=0; i<row ; i++) { if(q[i] == col || q[i] == col-row+i || q[i] == row+col-i || r[i] == col || r[i] == col-row+i || r[i] == row+col-i) return false; } return true; } bool valid2(int row, int col, int q[n+m], int r[n+m]) { for(int i=0; i<row ; i++) { if(q[i] == col || q[i] == col-row+i || q[i] == row+col-i ) return false; } return true; }
Editor is loading...