http://www.techiedelight.com/print-possible-solutions-n-queens-problem/
蓝桥杯的题 也是看了别人代码写出来的 还有好几种解法 先这样吧
#include <iostream>
#include<cmath>
#include<cstring>
#include<cstdio>
using namespace std;
const int maxn=8;
char map[maxn][maxn];
int c[100],n;
int flag;
bool place(int cur) //cur代表当前行
{
for(int i=0; i<cur; i++)
if(c[i]==c[cur]||fabs(i-cur)==fabs(c[i]-c[cur])) //在同一列,在对角线上
return false;
return true; //该返回值代表的是符合条件的
}
void queen(int cur)
{
if(cur>=n)
{
for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
cout<<map[i][j]<<" ";
cout<<endl;
}
flag=1;
return;
}
//if(flag==1)return;
for(int j=0;j<n;j++)
{
c[cur]=j; //这一行把皇后放在了哪一列
if(place(cur))
{
map[cur][j]='Q';
cur++; //成功了 就去放下一行
queen(cur);
cur--; //回溯 执行到这一步说明已经全部探索完了 撤销此走法找另一种
map[cur][j]='-';
}
}
}
int main()
{
while(cin>>n)
{
flag=0;
memset(map,'-',sizeof(map));
queen(0);
}
return 0;
}