📄 queen.cpp
字号:
#include <iostream.h>
bool a[9],b[15],c[15];
//a[i]为皇后的行位置,b[i]为对角线,c[i]为反对角线
int LineNum[9];
int n;//方法数
bool ok;//参数ok
void solve(int j,bool& ok)//递归函数,负责往第j列开始的连续8-j+1列放皇后
{ int i,k;
for(i=1;i<=8;i++)
{
if((a[i]==true)&&(b[i+j-2]==true)&&(c[i-j+7]==true))
//判断j列i行是否安全
{
LineNum[j]=i;//第j列的皇后放在第i行
ok=true;
a[i]=false;
b[i+j-2]=false;
c[i-j+7]=false;
if(j<8)
{
solve(j+1,ok);
}
else//布满皇后,输出
{ n++; cout<<n<<endl;
for(k=1;k<=8;k++)//坐标位置输出
{
cout<<"("<<LineNum[k]<<","<<k<<")";
}
cout<<endl;
for(int m=1;m<=8;m++)//棋盘输出
{
for(k=1;k<=8;k++)
{
if(m==LineNum[k])
cout<<'Q';
else
cout<<'+';
}
cout<<endl;
}
}
a[i]=true;
b[i+j-2]=true;
c[i-j+7]=true;
}
else
ok=false;
}
}
int main()
{ int i;
n=0;
for(i=0;i<9;i++)//初始空棋盘
a[i]=true;
for(i=0;i<15;i++)//初始空棋盘
{
b[i]=true;
c[i]=true;
}
solve(1,ok);
return 0;//成功返回0
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -