HDU 2553 N皇后有关问题
HDU 2553 N皇后问题 .N皇后问题Time Limit: 2000/1000 MS (Java/Others)????Memory Limit: 32768/32768 K
HDU 2553 N皇后问题 .
N皇后问题
Time Limit: 2000/1000 MS (Java/Others)????Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 1753????Accepted Submission(s): 769
:42864782011-07-29 14:21:12Accepted255331MS240K1060 BC++#include <iostream>using namespace std;#define MAXI 11int maz[MAXI][MAXI];void mark(int n, int x, int y, int add){ int i, f = 1; for (i = 0;f ; i++) { f = 0; if (x - i >= 0 || y - i >= 0 || x + i < n || y + i < n) { f = 1; if (x + i < n) maz[x + i][y] += add; if (y + i < n) maz[x][y + i] += add; if (x - i >= 0) maz[x - i][y] += add; if (y - i >= 0) maz[x][y - i] += add; if (x + i < n && y + i < n) maz[x + i][y + i] += add; if (x + i < n && y - i >= 0) maz[x + i][y - i] += add; if (x - i >= 0 && y + i < n) maz[x - i][y + i] += add; if (x - i >= 0 && y - i >= 0) maz[x - i][y - i] += add; } }}int DFS(int x, int n){ int y, tsu = 0; if (x == n) return 1; for (y = 0; y < n; y++) if (!maz[x][y]) { mark(n, x, y, 1); tsu += DFS(x + 1, n); mark(n, x, y, -1); } return tsu;}int main(){ int n, i, step[MAXI]; for (i = 0; i < MAXI; i++) step[i] = DFS(0, i); while (scanf("%d", &n), n) printf("%d\n", step[n]); return 0;}
?水题也……