842. 排列数字 - AcWing题库
#include <bits/stdc++.h>
using namespace std;
int u,n;
int path[10],state[10];
void dfs(int u){
//1.规定好返回条件
if(u>n){
for(int i=1;i<=n;i++){
cout<<path[i]<<' ';
}
cout<<endl;
return;
}
//1-n遍历一下
for(int i=1;i<=n;i++){
//2.没有被放到path里,放进去
if(!state[i])path[u]=i;
else continue;
//置标志位为1
state[i]=1;
//3.接着dfs
dfs(u+1);
//4.开始往回走了,把条件复位
state[i]=0;
path[u]=0;
}
}
int main(){
cin>>n;
dfs(1);
return 0;
}
843. n-皇后问题 - AcWing题库
#include <bits/stdc++.h>
using namespace std;
//注意这里要开两倍的大小,要不然i+u会暴的
const int N=12*2;
int col[N],dg[N],udg[N];
int n;
char g[N][N];
void dfs(int u){
//1.返回条件
if(u==n){
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
cout<<g[i][j];
}
cout<<endl;
}
cout<<endl;
return;
}
for(int i=0;i<n;i++){
if(!col[i] && !dg[i+u] && !udg[n-i+u]){
//2.走条件
g[u][i]='Q';
col[i]=dg[i+u]=udg[n-i+u]=1;
//3.dfs
dfs(u+1);
//4.复原条件
col[i]=dg[i+u]=udg[n-i+u]=0;
g[u][i]='.';
}
}
}
int main(){
cin>>n;
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
g[i][j]='.';
}
}
dfs(0);
return 0;
}