三种dfs
作者:
stc
,
2024-03-05 17:21:39
,
所有人可见
,
阅读 43
排列型
void dfs(int u){
if(u > n){
for(int i=1;i<=n;i++) cout << a[i] << ' ';
cout << endl;
return;
}
for(int i=1;i<=n;i++){
if(!st[i]){
st[i] = true;
a[u] = i;
dfs(u+1);
st[i] = false;
}
}
}
指数型
void dfs(int u){
if(u > n){
for(int i=1;i<=n;i++){
if(a[i]) cout << a[i] << ' ';
}
cout << endl;
return;
}
a[u] = 0;
dfs(u+1);
a[u] = u;
dfs(u+1);
}
组合型
// u为当前位置,num为已有个数
void dfs(int u,int num){
if(num > m){
for(int i=1;i<=m;i++) cout << a[i] << ' ';
cout << endl;
return;
}
for(int i=u;i<=n;i++){
a[num] = i;
dfs(i+1,num+1)
}
}