八皇后:
#include <stdio.h> #include <stdlib.h> #include <math.h> #include <algorithm> #include <memory.h> int n = 8; int total = 0; int c[8]; bool is_ok (int row) { for (int j = 0; j < row; j++) { if (c[row] == c[j] || row - c[row] == j - c[j] || row + c[row] == j + c[j]) { return false; } } return true; } void queen (int row) { if (row == n) { total++; } else { for (int col = 0; col < n; col++) { c[row] = col; if (is_ok(row)) { queen(row+1); } } } } int main (int argc, char **argv) { queen(0); printf("%d", total); return 0; }
N皇后:
#include <stdio.h> #include <stdlib.h> #include <math.h> #include <algorithm> #include <memory.h> int visit[3][50]; int a[50]; int sum; int n = 8; void dfs (int row) { int i; if (row == n+1) { sum++; return; } for (i=1; i<=n; i++) { if (visit[0][row-i+n] == 0 && visit[1][i] == 0 && visit[2][row+i] == 0) { visit[0][row-i+n] = visit[1][i] = visit[2][row+i] = 1; dfs(row+1); visit[0][row-i+n] = visit[1][i] = visit[2][row+i] = 0; } } } int main (int argc, char **argv) { sum = 0; memset(visit, 0, sizeof(visit)); dfs(1); printf("%d", sum); return 0; }