s.c (916B)
1 #include <stdio.h> 2 #include <stdlib.h> 3 #include <string.h> 4 #include <stdint.h> 5 6 uint8_t state[8][8]; 7 uint8_t b[8][8]; 8 uint64_t res; 9 10 void backtrack(int n) 11 { 12 int i; 13 int j; 14 15 if (n == 8) { 16 res++; 17 return; 18 } 19 20 for (i = 0; i < 8; i++) { 21 if (state[n][i] || b[n][i]) 22 continue; 23 24 for (j = n; j < 8; j++) 25 state[j][i]++; 26 27 for (j = 0; i + j < 8 && n + j < 8; j++) 28 state[n+j][i+j]++; 29 30 for (j = 0; i - j >= 0 && n + j < 8; j++) 31 state[n+j][i-j]++; 32 33 backtrack(n + 1); 34 35 for (j = n; j < 8; j++) 36 state[j][i]--; 37 38 for (j = 0; i + j < 8 && n + j < 8; j++) 39 state[n+j][i+j]--; 40 41 for (j = 0; i - j >= 0 && n + j < 8; j++) 42 state[n+j][i-j]--; 43 44 } 45 } 46 47 int solve() 48 { 49 int i; 50 int j; 51 52 for (i = 0; i < 8; i++) { 53 for (j = 0; j < 8; j++) 54 if (getchar() == '*') 55 b[i][j] = 1; 56 57 getchar(); 58 } 59 60 backtrack(0); 61 62 printf("%llu\n", res); 63 64 return 0; 65 } 66 67 int main() 68 { 69 int t = 1; 70 while (t--) 71 solve(); 72 }