dfs全排列问题
#include <iostream>
#include <vector>
using namespace std;
const int N= 10;
int n;
vector<int> path;
bool st[N];
void dfs(int k){
if(k==n){
for(int i = 0;i<n;i++) cout<<path[i]<<' ';
cout<<endl;
return ;
}
for(int i = 1;i<=n;i++){
if(st[i]==0){
path.push_back(i);
st[i] = 1;
dfs(k+1);
path.pop_back();
st[i] = 0;
}
}
}
int main(){
cin>>n;
dfs(0);
return 0;
}
#include <iostream>
#include <vector>
using namespace std;
const int N = 100;
bool zuoxie[N],youxie[N],lie[N];
vector<int> queens;
int n;
void dfs(int k){
if(k==n){
for(int i = 0;i<n;i++){
for(int j = 0;j<n;j++){
if(queens[i]==j)
cout<<"Q";
else
cout<<".";
}
printf("\n");
}
cout<<endl;
return ;
}
for(int i = 0;i<n;i++){
if(lie[i]==0&&zuoxie[i-k+n]==0&&youxie[i+k]==0){
queens.push_back(i);
lie[i] = 1;
zuoxie[i-k+n] = 1;
youxie[i+k] = 1;
dfs(k+1);
queens.pop_back();
lie[i] = 0;
zuoxie[i-k+n] = 0;
youxie[i+k] = 0;
}
}
}
int main() {
cin>>n;
dfs(0);
return 0;
}