最后一个点TLE,求助神犇、dalao

P1219 [USACO1.5] 八皇后 Checker Challenge

```cpp #include <cstdio> int sum = 0; int cnt = 0; int abs(int); void queen(int *, int); int check(int *, int); int main() { int size; scanf("%d", &size); int *ptr = new int[size]; queen(ptr, size); printf("%d\n", sum); delete ptr; return 0; } int abs(int input) { return input > 0 ? input : -input; } int check(int *ptr, int n) { for (int i = 0; i < n; i++){ if (*(ptr + i) == *(ptr + n) || abs(*(ptr + i) - *(ptr + n)) == abs(i - n)) return 0; } return 1; } void queen(int *ptr, int max) { for (int i = 0; i < max; i++) *(ptr + i) = 0; int k = 0; while (k >= 0){ *(ptr + k) = *(ptr + k) + 1; while (*(ptr + k) <= max && !check(ptr, k)) *(ptr + k) = *(ptr + k) + 1; if (*(ptr + k) <= max && k < max - 1) k++; else if (*(ptr + k) <= max && k == max - 1) { if (cnt < 3) { printf("%d", *ptr); for (int i = 1; i < max; i++) printf(" %d", *(ptr + i)); printf("\n"); cnt++; } sum++; } else { *(ptr + k) = 0; k--; } } } ```
by AzusidNya @ 2018-01-14 12:39:56


。。。。。。
by 倾城ファン恋 @ 2018-01-26 21:57:29


剪枝,否则过不了
by panzeyu2013 @ 2018-02-05 12:59:14


|