RT, 蒟蒻求解
#include<bits/stdc++.h>
using namespace std;
bool line[100],d1[100],d2[100];//line列(写错了又懒得改)
//d1对角线1,d2对角线2
int hh[1000],sum;
//hh皇后位置
int x;
void sprintf()
{
int i;
sum++;
if(sum<=3)//打印,<=3是为了方便对照
{
cout<<"No.";
printf("%2d\n",sum);
for(int i=1;i<=8;i++)
{
for(int j=1;j<=8;j++)
{
if(hh[i]==j)
{
cout<<"1";
}
else
{
cout<<"0";
}
if(j!=8)
{
cout<<" ";
}
}
cout<<endl;
}
}
/*for(int i=1;i<=8;i++)
{
printf("%2.d %2.d\n",i,hh[i]);
}*/
}
void sousuo(int n)
{
//cout<<n<<endl;
for(int i=1;i<=x;i++)
{
if((!line[i])&&(!d1[n-i+x-1])&&(!d2[i+n]))
{
//cout<<1<<endl;
hh[n]=i;
line[i]=1;
d1[n-i+x-1]=1;
d2[i+n]=1;
if(n==x)
{
sprintf();//打印
}
else
{
sousuo(n+1);
}
d1[n-i+x-1]=0;
d2[i+n]=0;
line[i]=0;//回溯
}
/*
cout<<n;
if(n==8)
{
return;
}
else
{
sousuo(n+1);
}
*/
}
}
int main()
{
cin>>x;
sousuo(1);
cout<<sum;
return 0;
}
sum的结果是对的但是打印输出没有按照字典序 求解