利用深度优先搜索的性质可以方便的生成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. 不一样的编码风格--Lambda表达式

    Lambda表达式也是C#3.0中最重要的特性之一. 1.Lambda表达式的简介 Lambda表达式可以理解为一个匿名方法,它可以包含表达式和语句,并且用于创建委托或转换为表达式树.在使用Lambd ...

  2. C++多态性的理解

    本文章转载来自:http://www.sollyu.com/?p=627 代码 #include <iostream.h> class Animal { public: void eat( ...

  3. java对象初始化顺序的简单验证

    以下这段小程序对调用对象构造函数时,父类构造函数.成员变量初始化函数,以及非静态初始化块调用顺序进行验证,不考虑静态成员及静态初始化块. public class Derive extends Bas ...

  4. WPF页面跳转

    WPF页面跳转有两种:一种是windows,另外一种是page  1:windows页面跳转windows 页面跳转相信学过winform编程的哥们都知道,先实例化该窗体然后show一下就可以了.eg ...

  5. git revert all changes

    点击打开链接https://www.kernel.org/pub/software/scm/git/docs/git-reset.html # Revert changes to modified f ...

  6. C# 给picturebox添加滚动条

    在一个项目中需要给picturebox增加滚动条,我先前的做法和网上一样,将picturebox放在一个panel上,将panel的AutoScroll设置为ture,将picturebox的Size ...

  7. php date('Y')

    date('Y')默认是y-12-01 date('Y-01')!!!才是我需要的

  8. 通过表名显示数据库中该表的表头和内容(mysql扩展库操作)

    编写一个函数,接收一个表名,然后把表的表头和内容显示在网页 <?php function readTab($tableName){ $conn=mysql_connect("local ...

  9. 在Laravel5.* 中使用 AdminLTE

    在Laravel5.* 中使用 AdminLTE AdminLTE是一个很棒的单纯的由 HTML 和 CSS 构建的后台模板,在这片文章中,我将讲述如何将 AdminLTE 和 Laravel 优雅的 ...

  10. 快速生成json实体类

    读取一个json文件,并与实体相对应: static void Main(string[] args) { string json = ""; FileStream fs = ne ...