码迷,mamicode.com
首页 > 其他好文 > 详细

01背包思想解决组合问题并输出组合

时间:2018-09-13 20:16:59      阅读:147      评论:0      收藏:0      [点我收藏+]

标签:==   return   遍历   cst   两种   index   void   i++   turn   

//01背包思想 每个数都有 选 与 不选 两种可能
#include<cstdio>
int n, r;
bool Vis[21] = {false};
void DFS(int index, int nowR){
    
    //边界
    if(index == n+1){            // 说明已经遍历完了 n个数
        if(nowR == r) {          //说明刚好选了r个数
            for(int i = 1; i <= n; i++ ){
                if(Vis[i])    printf("%d", i); //输出组合
            }
            printf("\n");
        }
        return ;
    }
    //选第index个
    if(nowR > r) return ;   //  剪枝
    Vis[index] = true;         //    标记已经用了
    DFS(index + 1, nowR + 1);
    Vis[index] = false;     //  释放
    
    //不选第index个
    DFS(index + 1, nowR);
}

int main(){
    
    scanf("%d%d", &n, &r);
    DFS(1,0);
    return 0;
}

01背包思想解决组合问题并输出组合

标签:==   return   遍历   cst   两种   index   void   i++   turn   

原文地址:https://www.cnblogs.com/GLcat/p/9642251.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!