八皇后問題是經典題目,無需贅述
樣例輸入1
6
樣例輸出1
* Q * * * *
* * * Q * *
* * * * * Q
Q * * * * *
* * Q * * *
* * * * Q *
* * Q * * *
* * * * * Q
* Q * * * *
* * * * Q *
Q * * * * *
* * * Q * *
* * * Q * *
Q * * * * *
* * * * Q *
* Q * * * *
* * * * * Q
* * Q * * *
* * * * Q *
* * Q * * *
Q * * * * *
* * * * * Q
* * * Q * *
* Q * * * *
Total have 4 times.
樣例輸入2
8
樣例輸出2
Q * * * * * * *
* * * * Q * * *
* * * * * * * Q
* * * * * Q * *
* * Q * * * * *
* * * * * * Q *
* Q * * * * * *
* * * Q * * * *
Q * * * * * * *
* * * * * Q * *
* * * * * * * Q
* * Q * * * * *
* * * * * * Q *
* * * Q * * * *
* Q * * * * * *
* * * * Q * * *
Q * * * * * * *
* * * * * * Q *
* * * Q * * * *
* * * * * Q * *
* * * * * * * Q
* Q * * * * * *
* * * * Q * * *
* * Q * * * * *
Total have 92 times.
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<algorithm>
using namespace std;
const int N = 30;
int map[N][N];
bool vis_line[N],vis_row[N],vis_left[N],vis_right[N];
int times,n;
void print(){
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
if(map[i][j]==1){
cout<<"Q ";
}
else cout<<"* ";
}
cout<<endl;
}
cout<<endl;
return;
}
void search(int num){
if(num<=n){
for(int j=1;j<=n;j++){
if((vis_line[num]==false)&&(vis_row[j]==false)&&(vis_left[num-j+20]==false)&&(vis_right[num+j]==false)){
map[num][j]=1;
vis_line[num]=true;
vis_row[j]=true;
vis_left[num-j+20]=true;
vis_right[num+j]=true;
search(num+1);
map[num][j]=0;
vis_line[num]=false;
vis_row[j]=false;
vis_left[num-j+20]=false;
vis_right[num+j]=false;
}
}
}
else if(num>n){
times++;
print();
return;
}
}
int main()
{
cin>>n;
search(1);
cout<<"Total have "<<times<<" times.";
return 0;
}