ref: 2346a6274196c02e801c7bb1dfab68332ce1e766
dir: /tests/0041-queen.c/
int *calloc(int, int); int N; int *t; int chk(int x, int y) { int i; int r; for (r=i=0; i<8; i++) { r = r + t[x + 8*i]; r = r + t[i + 8*y]; if (x+i < 8 & y+i < 8) r = r + t[x+i + 8*(y+i)]; if (x+i < 8 & y-i >= 0) r = r + t[x+i + 8*(y-i)]; if (x-i >= 0 & y+i < 8) r = r + t[x-i + 8*(y+i)]; if (x-i >= 0 & y-i >= 0) r = r + t[x-i + 8*(y-i)]; } return r; } int go(int n, int x, int y) { if (n == 8) { N++; return 0; } for (; y<8; y++) { for (; x<8; x++) if (chk(x, y) == 0) { t[x + 8*y]++; go(n+1, x, y); t[x + 8*y]--; } x = 0; } } int main() { t = calloc(64, sizeof(int)); go(0, 0, 0); if(N != 92) return 1; return 0; }