八皇后的代码如下:
#include<iostream>
using namespace std;
void fun(int,int[],int);
bool isPlace(int[],int,int);
void display(int[],int);
int main() {
int n;
while(cin>>n) {
int *p = new int[n+1];
fun(n,p,1);
}
return 0;
}
void fun(int n,int a[],int temp) {
if(temp==n+1) {
/*经典回朔法的输出
for(int i=1;i<=n;i++) {
cout<<a[i];
}
cout<<endl;
*/
display(a,n);
return ;
}
for(int i=1;i<=n;i++) {
a[temp] = i;
if(isPlace(a,i,temp))//加了这个条件,判断是否符合八皇后的条件才调用递归
fun(n,a,temp+1);
/*这段代码也是用回朔法输出类似000 001 010这种二进制的所有情况
a[temp] = 0;
fun(n,a,temp+1);
a[temp] = 1;
fun(n,a,temp+1);
*/
}
}
bool isPlace(int a[],int i,int temp) {
for(int j=1;j<temp;j++) {
if((a[j]==i)) {
return false;
}
else if((j+a[j]==temp+i)||(j-a[j]==temp-i)) {
return false;
}
}
return true;
}
void display(int a[],int n) {
for(int i=1;i<=n;i++) {
for(int j=1;j<=n;j++) {
if(a[i]==j) {
cout<<"1 ";
}
else cout<<"0 ";
}
cout<<endl;
}
cout<<endl;
}