#include<iostream>
#include<cmath>
using namespace std;
bool place(int* paraSolution,int paraT){
for(int j=1;j<paraT;j++){
if ((abs(paraT-j)==abs(paraSolution[j]-paraSolution[paraT])) || (paraSolution[j] == paraSolution[paraT]))
return false;
}
return true;
}//判断位置是否冲突
void backtracking(int* paraSolution,int paraN,int paraT){
if(paraT>paraN){
for(int i=1;i<=paraN;i++)
printf("%d ",paraSolution[i]);
printf("\r\n");
}//皇后摆满结束递归
else{
for(int i=1;i<=paraN;i++){
paraSolution[paraT]=i;
if (place(paraSolution,paraT))
backtracking(paraSolution,paraN,paraT+1);//继续枚举下一个皇后
}
}
}
void nQueen(int paraN){
int* solution=(int*)malloc((paraN+1)*sizeof(int));
for(int i=0;i<=paraN;i++)
solution[i]=0;
backtracking(solution,paraN,1);
}
int main(){
int n;
cin>>n;
nQueen(n);
return 0;
}
N皇后问题
最新推荐文章于 2024-07-24 22:13:06 发布