zoukankan      html  css  js  c++  java
  • 递归实现组合型、指数型、排列型 枚举

    指数型枚举就是枚举子集, 常见的操作是枚举位向量。
    如果要枚举一个位向量的子集,刘汝佳有很漂亮的代码, 可以参考。

    树形结构可以描述组合, 这个规律必然有更深刻的意义,
    甚至可能可以从中总结出很好的思想方法(远超吾辈的傻逼思维), 遗憾呀, 以后再说吧。

    
    //指数型
    #include<bits/stdc++.h>
    using namespace std;
    const int maxn = 16;
    
    int n;
    bool S[maxn];
    
    void dfs(int k)
    {
        
        if(k == n+1)
        {
            
            for(int i=1; i<=n; ++i) if(S[i]) cout << i << ' ';
            putchar('
    ');
            return;
            
        }
        
        S[k] = 1;
        dfs(k + 1);
        S[k] = 0;
        dfs(k + 1);
        
    }
    
    int main()
    {
        
        cin >> n ;
        dfs(1);
        return 0;
        
    }
    
    //排列型
    #include<bits/stdc++.h>
    using namespace std;
    const int maxn = 10;
    
    int n;
    int Q[maxn];
    bool used[maxn];
    
    void dfs(int k)
    {
        
        if(k == n+1)
        {
            for(int i=1; i<=n; ++i) cout << Q[i] << ' ' ;
            putchar( '
    ' );
            return;
        }
        
        for(int i=1; i<=n; ++i) if(!used[i]) {
            used[i] = 1;
            Q[k] = i;
            dfs(k + 1);
            Q[k] = 0;
            used[i] = 0;
        }
        
    }
    
    int main()
    {
        
        cin >> n;
        dfs(1);
        return 0;
        
    }
    
    //组合型
    #include<bits/stdc++.h>
    using namespace std;
    const int maxn = 27;
    int n, m;
    int Q[maxn];
    
    void dfs(int k, int pre)
    {
        if(k == m + 1)
        {
            for(int i=1; i<=m; ++i) cout << Q[i] << ' ' ;
            putchar('
    ');
            return;
            
        }
        
        for(int i=pre + 1; i<=n-(m-k); ++i)
        {
            Q[k] = i;
            dfs(k+1, i);
        }
        
    }
    
    int main()
    {
        
        cin >> n >> m;
        dfs(1, 0);
        return 0;
        
    }
    
    
  • 相关阅读:
    javaWeb快速入门+——初体验-HelloWorld
    简单理解Linux系统的挂载是什么鬼
    STM32MP157 Cortex®-M4高性能系列MCU
    常见六种锂电池特性及参数对比
    IIC通信详解
    stm32微秒延时问题
    STM32 HAL库实现微秒级别延时
    开关电源波纹的产生、测量及抑制
    图解DIY 1pA超微电流测试器
    stm32
  • 原文地址:https://www.cnblogs.com/tztqwq/p/12238286.html
Copyright © 2011-2022 走看看