0041-queen.c (1148B)
1 int *calloc(int, int); 2 3 int N; 4 int *t; 5 6 int 7 chk(int x, int y) 8 { 9 int i; 10 int r; 11 12 for (r=i=0; i<8; i++) { 13 r = r + t[x + 8*i]; 14 r = r + t[i + 8*y]; 15 if (x+i < 8 & y+i < 8) 16 r = r + t[x+i + 8*(y+i)]; 17 if (x+i < 8 & y-i >= 0) 18 r = r + t[x+i + 8*(y-i)]; 19 if (x-i >= 0 & y+i < 8) 20 r = r + t[x-i + 8*(y+i)]; 21 if (x-i >= 0 & y-i >= 0) 22 r = r + t[x-i + 8*(y-i)]; 23 } 24 return r; 25 } 26 27 int 28 go(int n, int x, int y) 29 { 30 if (n == 8) { 31 N++; 32 return 0; 33 } 34 for (; y<8; y++) { 35 for (; x<8; x++) 36 if (chk(x, y) == 0) { 37 t[x + 8*y]++; 38 go(n+1, x, y); 39 t[x + 8*y]--; 40 } 41 x = 0; 42 } 43 return 0; 44 } 45 46 int 47 main() 48 { 49 t = calloc(64, sizeof(int)); 50 go(0, 0, 0); 51 if(N != 92) 52 return 1; 53 return 0; 54 } 55