遞歸 八皇後
阿新 • • 發佈:2019-01-30
遞歸 include ret int void lock == lse 輸出結果
遞歸 八皇後
題意
> 棋子不能在同一行,同一列,以及同一對角線。
> 輸出所有符合要求的情況。
- 步驟:用計數器統計次數,按列寫出全排列,再枚舉任意兩個棋子,如果不符合條件,則計數器不變。
#include <cstdio> #include <algorithm> const int maxn = 100; int n, p[maxn], hashTable[maxn] = {false}; int count = 0; void generateP(int index) { if (index == n + 1) { bool flag = true; for (int i = 1; i <= n; i++) { for (int j = i + 1; j <= n; j++) { if (abs(i - j) == abs(p[i] - p[j])) { flag = false; } } } if (flag) count++; return; } for (int x = 1; x <= n; x++) { if (hashTable[x] == false) { p[index] = x; hashTable[x] = true; generateP(index + 1); hashTable[x] = false; } } } int main() { n = 8; generateP(1); printf("%d", count); return 0; }
輸出結果 92
遞歸 八皇後