64,680
社区成员
发帖
与我相关
我的任务
分享
#include"iostream"
using namespace std;
int si=7,s[8]={8,8,8,8,8,8,8,8},a[1]={1}; //a[]用于表示当前棋盘当前行的皇后与前几行的皇后是否可共存,
//共存为1,不共存为0
void taken(int b[][8],int j,int i,int a[]) //判断是否共存函数,b[][]为棋盘,j为行,i为列
{
int n;
n=j;
for(n;n>0;n--)
{
if(j-n<0||i-n<0) //判断是否检验完毕
{
a[0]=0;
break;
}
if(b[j-n][i-n]==1||b[j-n][i+n]==1) //检验当前行皇后左上方,右上方是否存在皇后
{
a[0]=0;
break;
}
if(b[j-n][i]==1) //检验当前行皇后上方是否有其他皇后
{
a[0]=0;
break;
}
a[0]=a[0]*1; //该行皇后上方几行皇后共存
}
return;
}
void display(int b[][8]) //输出棋盘
{
int j,i;
for(j=0;j<8;j++)
{
for(i=0;i<8;i++)
{
cout<<b[j][i];
}
cout<<endl;
}
}
void voluate(int b[][8]) //递归制造8皇后棋盘函数
{
int m,t;
if(si<0)
{
return;
}
s[si]--;
if(s[si]<0)
{
return;
}
t=7-s[si];
for(m=0;m<8;m++)
{
b[t][m]=1;
taken(b,t,m,a);
if(m==7)
{
si--;
display(b);
b[t][m]=0;
}
voluate(b);
}
}
void main()
{
int b[8][8]={0},q,i,j;
voluate(b);
}