N皇后问题
递归实现
注释在代码中
代码
#include<iostream>
#include<cmath>
using namespace std;
int n;
int pos[101]; //用于储存位置
void npos(int k) //在k之前的皇后已经摆好的前提下,摆第k个
{
if(k==n+1) //注意条件,n个都已经摆好,终止条件是要摆n+1
{
for(int i=1;i<=n;i++)
cout<<pos[i]<<" "; //输出位置
cout<<endl;
return;
}
for(int i=1;i<=n;i++) //循环确定位置
{
int j;
for(j=1;j<k;j++)
{
if(pos[j]==i||abs(pos[j]-i)==abs(j-k)) //判断与前面的每一个是否有冲突。
break; //若有,则判断下一行
}
if(j==k)
{
pos[k]=i; //将第k个放在第i行
npos(k+1); //计算k+1个的位置
}
}
}
int main()
{
cin>>n;
npos(1); //从第1个开始
return 0;
}