递归实现指数型 / 组合型 / 排列型枚举

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. 递归实现排列型枚举-题解

《算法竞赛进阶指南》-AcWing-94. 递归实现排列型枚举-题解

三种形式全排列——指数型排列型组合型类型题目汇总

递归与递推一

递归与递推一

AcWing 92. 递归实现指数型枚举