int LineNum[9];
bool a[9],b[15],c[15];
void init(){
for(int i=0;i<9;i++)
a[i]=true;
for(i=0;i<15;i++)
{
b[i]=true;
c[i]=true;
}
}
void solve(int i,bool& ok){
int j=0;
do{
j++;
ok=false;
if(a[j]&&b[i+j-2]&&c[i-j+7]){
LineNum[i]=j;
a[j]=false;
b[i+j-2]=false;
c[i-j+7]=false;
if(i<8){
solve(i+1,ok); //递归调用
if(!ok){
a[j]=true;
b[i+j-2]=true;
c[i-j+7]=true;
}
原文请找腾讯752018766优,文-论'文.网http://www.chuibin.com/
init(); //初始化
bool ok;
solve(1,ok);
if(ok){
for(int i=1;i<=8;i++)
cout<<"("<<LineNum[i]<<","<<i<<")";
cout<<endl;
for(i=1;i<=8;i++){
int j,col;
for(j=1;j<=8;j++)
if(LineNum[j]==i)
col=j;
for(j=1;j<=8;j++) //输出要求图形
if(j==col) cout<<"Q";
else cout<<"+";
cout<<endl;
}
}
else
cout<<"No solution";