/*******************
> Mail:keson@bupt.edu.cn
> Created Time: 2014年11月14日 星期五 19时55分35秒
************************************************************************/
#include<iostream>
#include<vector>
#include<cmath>
using namespace std;
const int Queen_Size=15;
class Queen{
public:
Queen()=default;
void Print();
int check(const int &row,const int &cal);
void PlaceQueen(const int &row);
private:
int vec[Queen_Size];
};
int Queen:: check(const int &row,const int &cal)
{
for(int i=0;i<row;i++)
{
if(vec[i]==cal||abs(vec[i]-cal)==abs(i-row))
return 1;
}
return 0 ;
}
void Queen::PlaceQueen(const int &row)
{
static int cnt=1;
if(row==Queen_Size)
{
cout<<"num:"<<cnt<<endl;
cnt++;
Print();
}
else
{
for(int i=0;i!=Queen_Size;++i) //对于每一列
{
if(!check(row,i)) //检查该列是否可以放置
{
vec[row]=i;
PlaceQueen(row+1); //检测可以则放置下一行
}
}
}
}
void Queen::Print()
{
for(int i=0;i<Queen_Size;++i)
cout<<vec[i]<<" ";
cout<<endl;
}
int main()
{
Queen Q;
Q.PlaceQueen(0); //从第一行开始放置,行作为下标,即是皇后的个数
}