#include<bits/stdc++.h>
using namespace std;
int queenPos[100];//用于存放算好的皇后的位置,左上角是(0,0)
int N;
void NQueen(int k);
int main()
{
cin>>N;
NQueen(0);//从第0行开始摆皇后
return 0;
}
void NQueen(int k)//在0~k-1行皇后已经摆放好后,摆放第k行及其后面的皇后
{
int i;
if(k==N)//N个皇后都已经摆好
{
for(i=0;i<N;i++)
{
cout<<queenPos[i]+1<<" ";//输出每一行皇后的列的位置
}
cout<<endl;
return;
}
for(i=0;i<N;i++)//逐个尝试第k个皇后的位置(第k行摆在i位置,这里的i也就是表示列)
{
int j;
for(j=0;j<k;j++)
{//和已经摆好的k个皇后的位置比较,看是否冲突,j表示前面摆好的第j行的皇后
if(queenPos[j]==i||(abs(j-k)==abs(queenPos[j]-i)))
{
break;//冲突则测试下一个位置
}
}
if(j==k)//当前选的位置i不冲突
{
queenPos[k]=i;//将第k个皇后摆放在位置i
NQueen(k+1);
}
}
}
递归解决N皇后问题(C++)
于 2022-03-03 21:50:17 首次发布