/*题目内容:
国际象棋中的皇后可以沿着水平线,垂直线,或者斜线前进,吃掉遇到的所有棋子,如果棋盘上有八个皇后,则这八个皇后如何相安无事的
放置在棋盘上,1970年与1971年, E.W.Dijkstra与N.Wirth曾经用这个问题来讲解程式设计之技巧。
该题要求N皇后的放置结果共有多少种
输入描述
输入一个正整数N(N小于16)
输出描述
输出结果
输入样例
8
输出样例
92
*/
#include <iostream> #include <algorithm> using namespace std; int hou[100]; //第i行 hou[i]列 int n = 0; int c = 0; int fun(int k){ //摆放第k行皇后,并且0到K-1行皇后已经放好了 if(k == n){ //说明已经放好了n个皇后,则结束一种 // for(int i = 0; i < n; i++) // cout << hou[i] + 1 << " "; // cout << endl; c++; return 1; } for(int i = 0; i < n; i++){ //检测每一列 //为什么是到N,不应是到八吗?? int j = 0; for(j = 0; j < k; j++){ //一行一行的看是否与前面的皇后冲突 if(hou[j] == i || abs(hou[j] - i) == abs(j - k)) break; } if(j == k){ hou[k] = i; fun(k+1); // 不能是fun(k++) } } } int main(){ cin >> n; fun(0); cout << c; return 0; }