八皇后
#include <stdio.h> #include <math.h> #include <string.h> int x[11], num; bool Place(int k) { int i = 1; while (i < k) { if (x[i] == x[k] || fabs(x[i] - x[k]) == fabs(i - k)) return false; i = i + 1; } return true; } void Print(int x[], int n) { printf("case%d: ", ++num); for (int i = 1; i <= n; i++) { for (int j = 1; j <= n; j++) { if (j != 1) printf(" "); if (j == x[i]) printf("1"); else printf("0"); } printf(" "); } } void NQueens(int n) { int k = 1; x[1] = 0; while (k > 0) { x[k] += 1; while (x[k] <= n && !Place(k)) x[k] += 1; if (x[k] <= n) { if (k == n) Print(x, n); else { k = k + 1; x[k] = 0; } } else k--; } } int main() { int n, f = 0; while (scanf("%d", &n), n != -1) { if (f) printf(" "); num = 0; memset(x, 0, sizeof(x)); NQueens(n); printf("There are %d kinds of ", num); f = 1; } }
一个序列,求位置。这个位置左边的数比他小,右边的比他大
这个需要搞个数组记录下,最远到哪里