题目内容:
国际象棋中的皇后可以沿着水平线,垂直线,或者斜线前进,吃掉遇到的所有棋子,如果棋盘上有八个皇后,则这八个皇后如何相安无事的 放置在棋盘上,1970年与1971年, E.W.Dijkstra与N.Wirth曾经用这个问题来讲解程式设计之技巧。 该题要求N皇后的放置结果共有多少种
输入描述
输入一个正整数N(N小于16)
输出描述
输出结果
输入样例
8
输出样例
92
程序代码
#include <iostream>
using namespace std;
#include <math.h>
int mmax,sum=0;
int x[16];
using namespace std;
//判断
bool Place(int n){
for(int i=1;i<n;i++){
if((x[i]==x[n]) || x[i]-x[n] == i - n || x[i] - x[n] == n - i){
return false;
}
}
return true;
}
//回溯
void Backtrack(int n){
int i;
for(i=1;i<=mmax;i++){
x[n]=i;
if(Place(n)){
if(n==mmax){
sum++;
}
else{
Backtrack(n+1);
}
}
}
}
//主函数
int main(){
cin>>mmax;
Backtrack(1);
cout<<sum;
return 0;
}