• 组合数(dfs)


    组合数

    时间限制:3000 ms  |  内存限制:65535 KB
    难度:3 
    描述
    找出从自然数1、2、... 、n(0<n<10)中任取r(0<r<=n)个数的所有组合。
    输入
    输入n、r。
    输出
    按特定顺序输出所有组合。
    特定顺序:每一个组合中的值从大到小排列,组合之间按逆字典序排列。
    样例输入
    5 3
    样例输出
    543
    542
    541
    532
    531
    521
    432
    431
    421
    321

    解:(https://blog.csdn.net/a15994269853/article/details/21109443)递归算法设计时要找出大规模问题与小规模问题之间的关系。首先固定第一个数5,其后求解n=4,r=2的组合数,共6个组合,其次固定第一个数4,其后就是求解n=3,r=2的组合数,总共是3个组合数;最后固定第一个数3,其后就是求解n=2,r=2的组合数,共一个组合。递归思路就是:n个数中r个数组合递推到n-1个数中r-1个数有组合,n-2个数中r-1个数有组合,r-1个数中r-1个数组合;当r=1时,递归终止。

    #include<iostream>
    using namespace std; 
    int n,r;
    int num[100];
    int dfs(int x,int y){ 
        int i;
        if(y==0){ 
            for (i=r; i>0; i--)
               cout<<num[i];//直到r==1时结束 
            cout<<endl;
            return 0;
        }
        else 
            for (i=x; i>=y; i--){//先遍历最大数的组合,如果n==5,先遍历r==3时,5的所有组合 
                num[y]=i;
                dfs(i-1,y-1);//再依次遍历4,3.... 
            }
    }
    int main(){ 
        cin>>n>>r;
        dfs(n,r);
        return 0;
    }
  • 相关阅读:
    关于SQL存储过程的问题
    Community Server的体系结构
    cs_Moderate_ApprovePost///cs_Moderate_CheckUser///cs_Moderate_DeletePost
    计划失败
    Menu 菜单栏
    基于混合云存储系统的电影推荐引擎小结
    zookeeper运维管理
    环境变量问题
    关于库
    腾讯猜字游戏
  • 原文地址:https://www.cnblogs.com/geziyu/p/9302894.html
Copyright © 2020-2023  润新知