标签:step i++ break clu std == ret 递归 int
#include <iostream>
#include <cmath>
using namespace std;
int queenpos[100];//设置数组存放每一行皇后的位置,下标是行数-1,值是列数
int n;//n皇后问题
void queen(int k)//皇后N问题
{
if(k==n)
{
for(int i=0;i<n;i++)//条件满足,循坏输出
cout<<queenpos[i]+1<<" ";
cout<<endl;
return;//一定要有return;
}
for(int i=0;i<n;i++)
{
int j;
for(j=0;j<k;j++)
{
if(queenpos[j]==i||abs(queenpos[j]-i)==abs(k-j))//it is the most important step;
break;//判断行数不同,列数一定不同,K就是,abs(queenpos[j]-i)==abs(k-j)用来判断对角线
}
if(j==k)
{
queenpos[k]=i;
queen(k+1);//递归调用、、
}
}
}
int main()
{
cin>>n;
queen(0);
return 0;
}
标签:step i++ break clu std == ret 递归 int
原文地址:http://www.cnblogs.com/masterchd/p/6683108.html