递归实现指数型 / 组合型 / 排列型枚举
Posted 辉小歌
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了递归实现指数型 / 组合型 / 排列型枚举相关的知识,希望对你有一定的参考价值。
92. 递归实现指数型枚举
#include<bits/stdc++.h>
using namespace std;
const int N=20;
int a[N],n;
void dfs(int index)
if(index==n+1)
for(int i=1;i<=n;i++) if(a[i]) cout<<i<<" ";
puts("");
return;
a[index]=1;
dfs(index+1);
a[index]=0;
dfs(index+1);
int main(void)
cin>>n;
dfs(1);
return 0;
93. 递归实现组合型枚举
#include<bits/stdc++.h>
using namespace std;
const int N=30;
int a[N],st[N],n,m;
void dfs(int index,int startx)
if(index==m)
for(int i=0;i<index;i++) cout<<a[i]<<" ";
puts("");
for(int i=startx;i<=n;i++)
if(!st[i])
st[i]=1,a[index]=i;
dfs(index+1,i);
st[i]=0;
int main(void)
cin>>n>>m;
dfs(0,1);
return 0;
94. 递归实现排列型枚举
#include<bits/stdc++.h>
using namespace std;
const int N=25;
int a[N],st[N],n;
void dfs(int index)
if(index==n)
for(int i=0;i<index;i++) cout<<a[i]<<" ";
puts("");
return;
for(int i=1;i<=n;i++)
if(!st[i])
a[index]=i,st[i]=1;
dfs(index+1);
st[i]=0;
int main(void)
cin>>n;
dfs(0);
return 0;
以上是关于递归实现指数型 / 组合型 / 排列型枚举的主要内容,如果未能解决你的问题,请参考以下文章
《算法竞赛进阶指南》-AcWing-94. 递归实现排列型枚举-题解