N皇后问题(c++)
#include<iostream>
#include<cmath>
using namespace std;
int queenPos[10];//保存搜索结果,每一行对应的列标,这里行列的标号均从0开始
int count=0;//计数
void NQueen(int n,int N);//搜索第n行
int main()
{
int N;
cin>>N;
NQueen(0,N);
cout<<count;
return 0;
}
void NQueen(int n,int N)
{
if(n==N)//执行完毕,输出结果
{
count++;
if(count<=3)
{
for(int i=0;i<N;i++)//打印输出
{
cout<<queenPos[i]+1<<" ";
}
cout<<endl;
}
return;
}
for(int i=0;i<N;i++)//一列一列尝试
{
int j;
for(j=0;j<n;j++)//保证前n+1行不会发生冲突
{
if(queenPos[j]==i||abs(queenPos[j]-i)==abs(n-j))//列相同,或者形成对角
break;
}
if(j==n)//没有发生冲突
{
queenPos[n]=i;
NQueen(n+1,N);//递归搜索下一行
}
}
}
祝学习愉快!