八皇后 回溯法
#include<bits/stdc++.h>
using namespace std;
const int Max=100;
int n,p[Max],answer=0;
bool hashTable[Max]= {0};
void generateP(int index) {
if(index==n+1) {
answer++;
return ;
}
for(int i=1; i<=n; i++) {
if(!hashTable[i]) {
bool flag=1;
for(int j=1; j<index; j++) {
if(abs(index-j)==abs(i-p[j])) {
flag=0;
break;
}
}
if(flag) {
p[index]=i;
hashTable[i]=1;
generateP(index+1);
hashTable[i]=0;
}
}
}
}
int main() {
cin>>n;
generateP(1);
cout<<answer;
return 0;
}
using namespace std;
const int Max=100;
int n,p[Max],answer=0;
bool hashTable[Max]= {0};
void generateP(int index) {
if(index==n+1) {
answer++;
return ;
}
for(int i=1; i<=n; i++) {
if(!hashTable[i]) {
bool flag=1;
for(int j=1; j<index; j++) {
if(abs(index-j)==abs(i-p[j])) {
flag=0;
break;
}
}
if(flag) {
p[index]=i;
hashTable[i]=1;
generateP(index+1);
hashTable[i]=0;
}
}
}
}
int main() {
cin>>n;
generateP(1);
cout<<answer;
return 0;
}