#include "stdafx.h"
#include<iostream>
using namespace std;
#define sum 4 //皇后个数
int aa; //皇后解法总数
bool check(int c[],int k) //检查是否合法,数组C是存储皇后的位置,k是当前皇后
{
int i;
for(i=1;i<=k-1;i++)
{
if(i==k)//在同一行
return false;
if(c[i]==c[k])//在同一列
return false;
if(k-i==c[k]-c[i])//在同一个对角线上
return false;
if(k-i==c[i]-c[k])//在同一个对角线上
return false;
}
return true;
}
void Trial(int i,int n,int c[])
{
int j;
if(i>n)//输出
{
for(j=1;j<=sum;j++)
cout<<c[j]<<"/t";
cout<<endl;
aa++;
}
else
{
for(j=1;j<=n;++j)
{
c[i]=j;//第i行j列放置一个皇后
if(check(c,i))//布局是否合法
Trial(i+1,n,c);
else
c[i]=0;//移走皇后
}
}
}
int _tmain(int argc, _TCHAR* argv[])
{
aa=0;
int c[sum+1];//记录皇后位置
int i;
for(i=1;i<=sum;i++)
c[i]=0;
Trial(1,sum,c);
cout<<endl<<sum<<"皇后问题解法总数:"<<aa<<"种"<<endl<<endl;
return 0;
}