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;
        
    }
    
    
  • 相关阅读:
    关于jQuery的选择器
    解读position定位
    html5新增的功能。
    关于ajax的同步异步
    响应式布局由来和剖析
    jQuery的效果函数及如何运用
    jQuery的选择器
    position定位的解析与理解
    HTML5与CSS3中新增的属性详解
    对Ajax的解析
  • 原文地址:https://www.cnblogs.com/tztqwq/p/12238286.html
Copyright © 2011-2022 走看看