排列组合问题,在学到深度优先搜索时候,经常遇到,这篇文章重点讲组合问题。ps:因为排列问题比组合问题简单很多。

首先我们必须了解排列和组合的区别,其实只有一点:排列讲究顺序,而组合不需要,所以这就是刚才排列较为简单的原因,直接深度搜索,不用考虑啥因素。但是组合问题,如果不在深度搜索里做点啥,会导致1 2 5, 1 5 2这样重复的一组出现。

我们来说说我实现组合的原理:其实无论你给定什么类型的数据,都可以看成是字符数组,对吧。无论你给定的是什么样的字符数组,我都可以看成是1 2 3 4 5 6…这样的数字组合,因为这些数字我可以看成是字符数组的下标,然后我把下标对应的字符拿出来,就是一个组合了,小编我还是可以的吧,哈哈。

比如:abxy这个数组,想要解决不重复问题,其实只要解决深度搜索每次不要重新回头搜索的问题。我的办法:初始化一个整数 bj 数组,初值为0
dfs(x=1)的时候,i=bj[x-1]+1 开始,这句话很起作用,它能保证你的 i 不会每次重新开始,只要在上一个搜索下标的后面开始搜索。
下面小编给出字符组合代码,其实我觉得字符组合就可以解决一切了。

#include <cstdio>
#include <iostream>
#include <iomanip>using namespace std;
int n, r;
char a[22];
int  aa[22]={0};
bool b[22] = {0};
string res;
int search(int);
int print();
int main()
{cin >> n >> r;for(int i=1;i<=n;i++){cin>>a[i];}search(1);
}
int search(int k)
{int i;if(k==r+1)print();for (i = aa[k-1]+1; i <=n; i++) //按由小到大的顺序排列,所以从上一个添加的数+1 开始搜索数字{if (!b[i]){aa[k]=i;res+=a[aa[k]];b[i] = 1;search(k + 1);b[i] = 0;res.erase(res.size()-1);}}
}
int print(){cout<<res;cout << endl;
}

如果觉得文章帮助到你的话,给小编一个赞喔。。

C++ 排列组合问题相关推荐

  1. java 穷举 排列组合,JavaScript递归穷举所有排列组合并找出重复值

    null export default { data() { return { resultArr:[] } }, mounted(){ this.sss('aaba','abac'); this.s ...

  2. php 1到9加,php通过排列组合实现1到9数字相加都等于20的方法

    摘要:本文实例讲述了php通过排列组合实现1到9数字相加都等于20的方法.分享给大家供大家参考.具体实现方法如下:<?php set_time_limit(0); /* 函数说明:huoqu_z ...

  3. 论排列组合,持续更新

    今天刚好碰到了一个排列组合问题,因为之前对这方面的学习比较少,所以用的非常蠢的方法做了四位数中取三位的排列,写的程序太有局限性,源码如下 #define _CRT_SECURE_NO_WORNINGS ...

  4. 无重复字符串的排列组合

    无重复字符串的排列组合.编写一种方法,计算某字符串的所有排列组合,字符串每个字符均不相同. 示例1: 输入:S = "qwe" 输出:["qwe", " ...

  5. 【牛客每日一题】4.16 逆序对 ( 数学 , 排列组合 ,快速幂 , 快速乘 )

    [每日一题]逆序对 链接:https://ac.nowcoder.com/acm/problem/14731 来源:牛客网 题目描述 求所有长度为n的01串中满足如下条件的二元组个数: 设第i位和第j ...

  6. js 排列 组合 的一个简单例子

    最近工作项目需要用到js排列组合,于是就写了一个简单的demo. 前几天在网上找到一个写全排列A(n,n)的code感觉还可以,于是贴出来了, 排列的实现方式: 全排列主要用到的是递归和数组的插入 比 ...

  7. 【数论】排列组合学习笔记

    目录 简介 加原理和乘法原理 加法原理 乘法原理 两原理的区别 例子 排列 例子 简介 排列组合是组合数学中的一种.排列就是指从给定个数的元素中取出指定个数的元素进行排序:组合则是指从给定个数的元素中 ...

  8. .NET平台开源项目速览(11)KwCombinatorics排列组合使用案例(1)

    阅读目录 1.KwCombinatorics基本介绍 2.足球彩票排列组合应用 3.排列组合生成代码与测试 今年上半年,我在KwCombinatorics系列文章中,重点介绍了KwCombinator ...

  9. 蓝桥杯——说好的进阶之去反复元素的排列组合

    将待排列(组合)的数组,先分别统计出种类和个数,然后进行避免反复的排列(组合). /* 1,1,2,3的排列组合 去反复* (借此复习排列组合)* * 1:2 2个1* 2:1 1个2* 3:1 1个 ...

  10. 【COGS】2287:[HZOI 2015]疯狂的机器人 FFT+卡特兰数+排列组合

    [题意][COGS 2287][HZOI 2015]疯狂的机器人 [算法]FFT+卡特兰数+排列组合 [题解]先考虑一维的情况,支持+1和-1,前缀和不能为负数,就是卡特兰数的形式. 设C(n)表示第 ...

最新文章

  1. 生物信息3天速成班—成为团队中不可或缺的人
  2. Elasticsearch原理与调优
  3. 设计模式系列·王小二需求历险记(一)
  4. 【Gym - 101775J】Straight Master(差分,思维)
  5. Opencv和C++实现canny边缘检测
  6. RDBMS vs. NoSQL Clojure概述
  7. 机器学习算法思想简单梳理
  8. [转载] 字符串的startsWith和endWith方法
  9. JSLIU 的 wxWindows 入门
  10. c语言编辑游戏时用哪个软件,我想用C语言编写一个小型游戏,使用什么软件
  11. 黑莓7290软件_黑莓7290,我买的是情怀
  12. gcc -fomit-frame-pointer选项,-fno-dwarf2-cfi-asm 选项
  13. 任务一:实现图形计算功能 1 关键算法(30 分)输入一个正方体的边长(a)计算正方体的体积。要求:结果保留两位小数,使用带参数的方法实现
  14. script什么意思中文翻译成,script中文是什么意思
  15. Olist巴西电商数据分析(二)
  16. element-ui中el-table组件的行号
  17. Linux 系统管理员
  18. 单位dbm db的关系与区别
  19. Skia深入分析8——Skia的GPU绘图
  20. 飞思卡尔I.MX6Q-LTIB安装配置

热门文章

  1. 纬度和经度的最大长度是多少?
  2. drupal php 版本,纯PHP drupal主题
  3. 淘宝API_获取购买到的商品订单列表
  4. 大屏一体机!奥可视新品A5亮点浅析
  5. python绘制社会关系网络图_python画社交网络图
  6. 笔记本电脑间的串口通信
  7. ADSL桥接模式和路由模式的区别
  8. 【转载】vue项目部署到阿里云上详解
  9. 如何理解最小二乘法?
  10. blob:https视频下载m3u8视频在线下载