#include <stdlib.h> #include <stdio.h> #include <string.h> int x[11]; // 第i列是否已经被占用 int y[11]; // 第i行的皇后在哪一列 int table[11]; int n; int sum; void dfs(int k) { // k代表着行 if (k > n) { sum++; return; } int i, j; for (i = 1; i <= n; i++) // 列 { if (x[i]) continue; // 该列已经有值 for (j = 1; j < k; j++) // if (abs(k - j) == abs(i - y[j])) break; if (j == k) { y[k] = i; x[i] = 1; dfs(k + 1); x[i] = 0; } } } int main() { // 打表 for (n = 1; n <= 10; n++) { memset(x, 0, sizeof(x)); memset(y, 0, sizeof(y)); sum = 0; dfs(1); table[n] = sum; } while (EOF != scanf("%d", &n) && n) { printf("%d\n", table[n]); } return 0; }
hduoj_2553(dfs, N皇后问题)
猜你喜欢
转载自blog.csdn.net/qq_32862515/article/details/80684313
今日推荐
周排行