利用深度优先搜索的性质可以方便的生成n的排列和组合,但是生成组合时每个组合里面元素的个数必须事先确定,以前以为生成组合跟排列一样到n时就可以回溯,直到今天做了某题之后才发现那是错的,那样做生成不了所有的组合。

生成排列(默认是全排列,也可以传个参数生成n的k排列)

 #include<cstdio>
#define MAXN 111
using namespace std;
int tmp[MAXN],vis[MAXN],n,k;
void dfs(int cnt,int num = n){
if(num > n){
printf("the input data is invalid !!!\n");
return;
}
if(cnt == num){
for(int i = ;i < cnt;i ++) printf("%d ",tmp[i]);
printf("\n");
}
for(int i = ;i <= n;i ++){
if(!vis[i]){
vis[i] = ;
tmp[cnt] = i;
dfs(cnt+,num);
vis[i] = ;
}
}
}
int main(){
while(~scanf("%d%d",&n,&k)) dfs(,k);
return ;
}

生成组合

 #include<cstdio>
#define MAXN 111
using namespace std;
int tmp[MAXN],n,k;
void dfs(int idx,int cnt,int k){
if(k > n){
printf("the input data is invalid!!!\n");
return;
}
if(cnt == k){
for(int i = ;i < cnt;i ++) printf("%d ",tmp[i]);
printf("\n");
}
for(int i = idx;i <= n;i ++){
tmp[cnt] = i;
dfs(i+,cnt+,k);
}
}
int main(){
while(~scanf("%d%d",&n,&k)) dfs(,,k);
return ;
}

dfs 生成排列和组合的更多相关文章

  1. python 生成排列、组合以及选择

    from <python cookbook> 19.15 任务 需要对一个序列的排列(permutation).组合(combination)或选择(selection)进行迭代操作.即使 ...

  2. DFS实现排列组合

    所谓排列,是指从给定的元素序列中依次取出元素,需要考虑取出顺序.比如,取出元素3, 5,因取出顺序的不同,则形成的序列{3, 5}与{5, 3}是不同的排列序列.对于长度为n的元素序列取出k个元素,则 ...

  3. 字符串数组元素排列与组合的Java递归实现

      我们在笔试面试过程中经常会遇到关于排列与组合的问题,其实这些可以通过递归简单的实现,看下面两个例子: (1)关于字符串排列的问题 输入一个字符串,打印出该字符串中字符的所有排列.例如输入字符串ab ...

  4. hibernate 联合主键生成机制(组合主键XML配置方式)

    hibernate 联合主键生成机制(组合主键XML配置方式)   如果数据库中用多个字段而不仅仅是一个字段作为主键,也就是联合主键,这个时候就可以使用hibernate提供的联合主键生成策略. 具体 ...

  5. 排列与组合的C语言实现

    排列与组合是数学里的经典问题,由这个问题可引申出子集.字典排序等问题,那么,我们先看经典的排列与组合,怎么在程序里实现. 在网上搜了一下,关注这个问题的人还是挺多的,有不了人给出的回答是使用几个for ...

  6. OI内的排列与组合(简单版)

    §1基本原理 △让我们来看下面问题: 从甲地到乙地,可以乘火车,也可以乘汽车,还可以乘轮船.一天中,火车有4班,汽车有2班,轮船有3班.那么,一天中乘坐这些交通工具从甲地到乙地共有多少种不同走法?△分 ...

  7. 【组合数学】OI内的排列与组合(简单版)

    §1基本原理 △让我们来看下面问题: 从甲地到乙地,可以乘火车,也可以乘汽车,还可以乘轮船.一天中,火车有4班,汽车有2班,轮船有3班.那么,一天中乘坐这些交通工具从甲地到乙地共有多少种不同走法?△分 ...

  8. 108_Power Pivot购物篮分析分组GENERATE之笛卡尔积、排列、组合

    博客:www.jiaopengzi.com 焦棚子的文章目录 请点击下载附件 1.背景 昨天在看论坛帖子时候(帖子),看到一个关于SKU组合的问题,有很多M大佬都给出了处理方案,于是想用dax也写一个 ...

  9. poj 1146 ID Codes (字符串处理 生成排列组合 生成当前串的下一个字典序排列 【*模板】 )

    ID Codes Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 6229   Accepted: 3737 Descript ...

随机推荐

  1. Js编码和Java后台解码

    1.java.将resultMsg 转为utf-8 (1) resultMsg = URLEncoder.encode(resultMsg, "utf-8"); (2) new S ...

  2. Range Minimum Query and Lowest Common Ancestor

    作者:danielp 出处:http://community.topcoder.com/tc?module=Static&d1=tutorials&d2=lowestCommonAnc ...

  3. 第一个wxWidgets程序

    wxWidgets的安装方法网上有一大堆,可以参照http://wiki.codeblocks.org/index.php?title=WxWindowsQuickRef 这里解压并编译 ,也可以参照 ...

  4. jekyll 的安装

    静态网站生成器Jekyll 是一个简洁的.特别针对博客平台的 静态网站 生成器.它使用一个模板目录作为网站布局的基础框架,并在其上运行 Textile . Markdown 或 Liquid 标记语言 ...

  5. 【VB6 学习文档管理系统源码】

    VB6写的一款笔记软件的源码,里面包含有很多窗体控件的使用技巧,比如MSHFlexgrid表格.TreeView的动态加载.Ado的增删改查等. 本软件提供对日常生活.工作中的学习笔记.图文并茂存储以 ...

  6. MOS管体二极管的作用

    这里有两种解释: 1.mos管本身自带有寄生二极管,作用是防止VDD过压的情况下,烧坏mos管,因为在过压对MOS管造成破坏之前,二极管先反向击穿,将大电流直接到地,从而避免MOS管被烧坏. 2.防止 ...

  7. “typedef int (init_fnc_t) (void);“的含义

    在读uboot的lib_arm/board.c中的start_armboot ()函数遇到了"init_fnc_t **init_fnc_ptr;”一句话,后来查看init_fnt_t数据类 ...

  8. C#开发攀爬集锦

    工具使用 Files has invalid value "<<<<<<< .mine". Illegal characters in p ...

  9. 毕向东_Java基础视频教程第19天_IO流(06~10)

    第19天-06-IO流(装饰设计模式) 装饰设计模式: 当想要对已有的对象进行功能增强时, 可以定义类,将已有对象传入,基于已有的功能,并提供加强功能.那么这个自定义的类称为装饰类. 装饰类通常会通过 ...

  10. UIImageView 的 contentMode

    UIViewContentModeScaleToFill, // 按设置尺寸 - 填充 UIViewContentModeScaleAspectFit, // 按设置尺寸 - 等比例填充, 有边界 U ...