int i,j;
for(i=0;i<t;i++) //打印二文数组
{
for(j=0;j<t;j++)
{
if(LineNum[i+1]==j+1)cout<<setw(2)<<"Q"; //能放皇后用Q
else cout<<setw(2)<<"*"; //不能放皇后用*
}
cout<<endl;
}
cout<<endl;
}
void solve(int i,bool& ok)
{
if (i==t+1)
{
ok=true; //有一个结果时ok值true
return; //返回
}
else
{
int j=1;
while(j<t+1) //j表示列数
{
if (a[j]&&b[i+j-2]&&c[i-j+t-1]) //某列能放皇后
{
LineNum[i]=j;
a[j]=false;
b[i+j-2]=false;
c[i-j+t-1]=false;
solve(i+1,ok); //调用下一行
//if(ok)return;
if(ok) //上一行返回后并有一种解法
{
n++;
print();
ok=false; //ok置false找下一种解法
}
原文请找腾讯752018766优,文-论'文.网http://www.youerw.com/ }
return;
}
}
int main()
{
cout<<"************************提高题 17题八皇后问题*********************"<<endl;
bool ok=false; //true代表有一种解法
cout<<"请输入棋盘个数:";
while(cin>>t)
{
for(int i=0;i<t+1;i++)a[i]=true; //初始化
for(int j=0;j<2*t-1;j++)
{
b[j]=true;
c[j]=true;
}
solve(1,ok); //调用solve
cout<<t<<"皇后问题一共有"<<n<<"种。"<<endl;
ok=false;
n=0;
cout<<endl<<"请输入棋盘个数:";
}
return 0;}