关于n皇后问题的一个问题
谁可以帮我解释下这个代码。好像说是递归
/*n 皇后问题*/
#include <cstdio>
#include <cmath>
#include <iostream>
using namespace std;
int n;
int queens[100]; //用来存放算好的皇后为止。最左上角是(0,0)
void Nqueen(int k);
void Nqueen(int k) //在0到k-1行 皇后已经摆好的情况下,摆第k行以及其后的皇后
{
int i;
if(k==n) //如果n个皇后都摆好了
{
for(i=0;i<n;i++)
cout<<queens[i]+1<<"";
cout<<endl;
}
else
{
for(i=0;i<n;i++) //逐个尝试第k个皇后的位置
{
int j;
for(j=0;;j++) //和已经摆放好的k个皇后的位置比较,看是否冲突
{
if(queens[j]==i || j==k || abs(queens[j]-i) == abs(k-j) ) // 行列相同 或者 如果行相减等于列相减
break; //冲突 回溯 尝试下一个位置
}
if(j==k)
{
queens[k]=i;
Nqueen(k+1);
}
}
}
}
int main()
{
cin>>n;
Nqueen(0); //从第0行开始摆皇后
return 0;
}