数据结构与算法C++实现8:递归的排列组合(Permutations)

2023-05-16

1 abc 经过排列组合有八种 abc, acb, bac, bca, cab, cba
2 要点:

void Permutations(char* p, const int k, const int m)
{
                                            // b开头的,后面跟着c所有的排列
                                            std::swap(p[1], p[1]);
                                            Permutations(p, 2, 2);      如果k == m  打印此时的p指针指向的内容 循环输出 abc
                                            std::swap(p[1], p[1]);
    // a开头的,后面跟着bc所有的排列
    std::swap(p[0], p[0]);
    Permutations(p, 1, 2);
    std::swap(p[0], p[0]);
                                            // c开头的,后面跟着b所有的排列
                                            std::swap(p[1], p[2]);
                                            Permutations(p, 2, 2);      如果k == m  打印此时的p指针指向的内容 循环输出 acb
                                            std::swap(p[1], p[2]);





                                            // a开头的,后面跟着c所有的排列
                                            std::swap(p[1], p[1]);
                                            Permutations(p, 2, 2);      如果k == m  打印此时的p指针指向的内容 循环输出 bac
                                            std::swap(p[1], p[1]);
    // b开头的,后面跟着ac所有的排列
    std::swap(p[0], p[1]);  // 交换 a b 位置
    Permutations(p, 1, 2);
    std::swap(p[0], p[1]);  // 还原 a b 位置

                                            // c开头的,后面跟着a所有的排列
                                            std::swap(p[1], p[2]);
                                            Permutations(p, 2, 2);      如果k == m  打印此时的p指针指向的内容 循环输出 bca
                                            std::swap(p[1], p[2]);






                                            // a开头的,后面跟着b所有的排列
                                            std::swap(p[1], p[1]);
                                            Permutations(p, 2, 2);      如果k == m  打印此时的p指针指向的内容 循环输出 cab
                                            std::swap(p[1], p[1]);
    // c开头的,后面跟着ab所有的排列
    std::swap(p[0], p[2]);  // 交换 a c 位置
    Permutations(p, 1, 2);
    std::swap(p[0], p[2]);  // 还原 a c 位置
                                            // b开头的,后面跟着a所有的排列
                                            std::swap(p[1], p[2]);
                                            Permutations(p, 2, 2);      如果k == m  打印此时的p指针指向的内容 循环输出 cba
                                            std::swap(p[1], p[2]);
}

3 见案例(diguipailiezuhe.cpp)

//
// Created by z on 20-2-11.
// 演示递归的排列组合
//
#include <iostream>

using namespace std;

// 递归的排列组合函数  arg1:char*类型的指针,指向需要进行排列组合的字符串  arg2:需要进行排列组合字符串的开始位置  arg3:需要进行排列组合字符串的终止位置
void Permutations(char* p, const int k, const int m)
{
    if(k == m)
    {
        for(int i = 0; i <= m; i++)
            cout << p[i];
        cout << endl;
    }

    else
    {
        for(int i = k; i <= m; i++)             // 好好理解这段代码,非常巧妙
        {
            swap(p[k], p[i]);
            Permutations(p, k + 1, m);
            swap(p[k], p[i]);
        }
    }

}

int main()
{
    char a[] = "abc";
    Permutations(a, 0, 2);
    return 0;
}


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

数据结构与算法C++实现8:递归的排列组合(Permutations) 的相关文章

  • 算法--将数组分成和相等的多个子数组,求子数组的最大个数

    作者 陈太汉 一个整数数组 长度为n 将其分为m份 使各份的和相等 求m的最大值 比如 3 2 4 3 6 可以分成 3 2 4 3 6 m 1 3 6 2 4 3 m 2 3 3 2 4 6 m 3 所以m的最大值为3 算法 原理的思想是
  • 白盒测试相关的一些知识

    在白盒测试中 可以使用各种测试方法进行测试 下面这篇文章 可能比较枯燥 如果不乐意读 可以先收藏 如果在你的工作中真遇到白盒测试的话 可以回过头再来看看 还是值得读一读 一般来说 白盒测试时要考虑以下5个问题 1 测试中尽量先用自动化工具来
  • Qt——用于表格QTableView的模型

    如果想使用表格来呈现数据 Qt提供了一个方便的部件QTableWidget 但是直接用它实现一些功能可能比较困难 这里将介绍一种强大 灵活的方式来操作表格 一 模型 视图架构 在这个架构中 模型用于存储数据 视图用于呈现数据 除此之外 还有
  • findBug 错误修改指南

    FindBugs错误修改指南 1 EC UNRELATED TYPES Bug Call to equals comparing different types Pattern id EC UNRELATED TYPES type EC c
  • 常用的十种算法--马踏棋盘算法

    1 马踏棋盘算法介绍 马踏棋盘算法也被称为骑士周游问题 将马随机放在国际象棋的 8 8 棋盘 Board 0 7 0 7 的某个方格中 马按走棋规则 马走日字 进行移动 要求每个方格只进入一次 走遍棋盘上全部 64 个方格 2 马踏棋盘算法
  • DNG格式解析

    Author Maddock Date 2015 04 22 转载请注明出处 http www cnblogs com adong7639 p 4446828 html DNG格式基本概念 DNG格式是在TIFF的基础上扩展出来的 要了解D
  • SDUT--OJ《数据结构与算法》实践能力专题训练6 图论

    A 数据结构实验之图论一 基于邻接矩阵的广度优先搜索遍历 Description 给定一个无向连通图 顶点编号从0到n 1 用广度优先搜索 BFS 遍历 输出从某个顶点出发的遍历序列 同一个结点的同层邻接点 节点编号小的优先遍历 Input
  • 手把手教你实现一个向量

    文章目录 什么是向量 向量提供哪些接口 实现 宏定义 定义类 成员变量 构造函数与析构函数 构造函数 析构函数 成员函数 size get r put r e expand insert r e remove lo hi remove r
  • 『Python基础-15』递归函数 Recursion Function

    什么是递归函数 一种计算过程 如果其中每一步都要用到前一步或前几步的结果 称为递归的 用递归过程定义的函数 称为递归函数 例如连加 连乘及阶乘等 凡是递归的函数 都是可计算的 即能行的 递归就是一个函数在它的函数体内调用它自身 编程语言中的
  • 数据结构与算法书籍推荐

    学习数据结构与算法 还是很有必要看几本相关的书籍 但根据不同基础的人 合适看的书也不一样 因此 针对不同层次 不同语言的人 推荐几本市面上口碑不错的书 1 入门级 针对刚入门的同学 建议不要急着去看那些经典书 像 算法导论 算法 这些比较经
  • UE4命令行使用,解释

    命令行在外部 从命令行运行编辑项目 1 导航到您的 LauncherInstall VersionNumber Engine Binaries Win64 目录中 2 右键单击上 UE4Editor exe 的可执行文件 并选择创建快捷方式
  • 链表面试题(一):反转链表的算法实现

    关于链表的考察 链表是面试里面经常涉及到的考点 因为链表的结构相比于Hashmap Hashtable Concurrenthashmap或者图等数据结构简单许多 对于后者更多面试的侧重点在于其底层实现 比如Hashmap中Entry
  • 图 - Java实现无向带权图的邻接矩阵表示法

    图 Java实现无向带权图的邻接矩阵表示法 1 图 1 1 图的介绍 图 Graph 是一种复杂的非线性表结构 图中的元素我们就叫做顶点 vertex 图中的一个顶点可以与任意其他顶点建立连接关系 我们把这种建立的关系叫做边 edge 跟顶
  • 如何防止过拟合和欠拟合

    过拟合和欠拟合是模型训练过程中经常出现的问题 两种情况正好相反 现将两者的定义及如何防止进行简要总结 1 过拟合 1 1 定义 是指模型对于训练数据拟合呈现过当的情况 反映到评估指标上就是模型在训练集上的表现很好 但是在测试集上的表现较差
  • 算法问题实战策略

    算法问题实战策略 基本信息作者 韩 具宗万 译者 崔盛一出版社 人民邮电出版社ISBN 9787115384621上架时间 2015 2 4出版日期 2015 年3月开本 16开页码 738版次 1 1 内容简介 算法问题实战策略 本书收录
  • 用指针访问一维数组

    文章目录 顺序查找 数组方式实现 指针实现方式 对一位数组元素的访问有三种方式 指针变量的关系运算 引例 数组实现方式 主函数 指针实现方式 主函数 一维数组作为函数的参数 实际应用 顺序查找 要求用指针实现 在整数集合r中顺序查找与给定值
  • 查找数组中第二大的数

    快速找出一个数组中的最大数 第二大数 思路 如果当 前元素大于最大数 max 则让第二大数等于原来的最大数 max 再把当前元素的值赋给 max 如果当前的元素大于等于第二大数secondMax的值而小于最大数max的值 则要把当前元素的值
  • 【数据结构】单链表的定义和操作

    目录 1 单链表的定义 2 单链表的创建和初始化 3 单链表的插入节点操作 4 单链表的删除节点操作 5 单链表的查找节点操作 6 单链表的更新节点操作 7 完整代码 嗨 我是 Filotimo 很高兴与大家相识 希望我的博客能对你有所帮助
  • 按照层次遍历结果打印完全二叉树

    按照层次遍历结果打印完全二叉树 按照推论结果 l 层首个节点位置 2 h l 1 l 层节点间距 2 h l 1 1 编码实现 public static
  • 高精度运算合集,加减乘除,快速幂,详细代码,OJ链接

    文章目录 零 前言 一 加法 高精度加法步骤 P1601 A B 二 减法 高精度减法步骤

随机推荐

  • linux w5500 驱动及使用

    1 驱动 驱动来源 a 内核驱动 xff1b b xff1a 官方驱动 a 内核 xff1a linux内核w5500驱动 xff0c 包含两个源文件w5100 c和w5100 spi c kernel drivers net ethern
  • 扩展 IO pca95555 linux驱动 及使用

    驱动 xff1a 内核驱动 xff1a kernel drivers gpio gpio pca953x c make menuconfig配置编译 或拷贝出来手动编译成模块加载 设备树 xff1a 使用2个芯片 xff0c 在同一i2c总
  • Linux内核崩溃 dump调试

    内核 crash 崩溃 xff0c oops消息 xff0c dump oops xff08 也称 panic xff09 xff0c 称程序运行崩溃 xff0c 程序崩溃后会产生oops消息 应用程序或内核线程的崩溃都会产生oops消息
  • 【路径规划】VFH

    简介 在没有全局地图或者是应对动态障碍物的情况下 xff0c 往往是运用局部规划来进行绕障 xff0c 在局部规划的经典算法中 xff0c 比较常用的是 DWA 与 VFH xff0c VFH 全名向量场直方图算法 xff0c 不同于 DW
  • keil5 编译程序出现错误Error: L6411E: No compatible library exists with a definition of startup symbol __main

    Error L6411E No compatible library exists with a definition of startup symbol main 之前装过ADS xff0c ADS与MDK冲突 xff0c 依据网友提供的
  • LORA 射频自组网 两级中继

    基于sx1276lora模块 xff0c 进行多个模块之间自组网 xff0c 组网形式为1个集中器加多个终端 模块之间距离较远时 xff0c 集中器无法直接与某个终端进行通信 xff0c 其他终端本身可作为中继给该终端作为中继与集中器通信
  • STM32上进行Delay延时的方法

    1 使用SYStick专门的延时 void delay us uint32 t us static uint32 t delay flag 61 0 delay flag 61 1 set reload register HCLK 61 4
  • 内核模块已打开,但开机未加载

    环境 xff1a 系 统 Centos 6 6 内核版本 xff1a linux 2 6 32 1 vmware转qcow2格式 xff0c 内核崩溃 最近做一个kvm的镜像 xff0c 尽力裁小内核大小 xff0c 从VMware格式转q
  • px4飞控校准中常遇到的一些坑

    1 校准中最后给飞控独立供电 xff0c 这样可以避免一些不必要的错误 比如要给飞控解锁 xff0c 就必须是给飞控独立供电 xff0c 不能通过USB线给飞控供电 2 校准时至少给飞控接上数传和GPS xff0c 注意GPS的方向和机头方
  • ros+mavros+gazebo仿真实践要点总结

    1 安装ros时要看好对应的版本 xff0c ubuntu16 4对应的kenitic版本 xff0c Ubuntu18 04对应的melodic版本 2 通过ssh方式clone px4 firmware比http方式快的多 3 参考教程
  • offboard

    GAAS
  • 无人机飞控系统的简单分析

    这里写自定义目录标题 刚上大一的时候的学业报告 xff0c 将就这看吧 无人机控制系统原理的简单分析 摘要 xff1a 无人机 xff08 UAV xff09 是无人驾驶飞机的简称 xff0c 是指利用无线电遥控设备和自备的程序控制装置操纵
  • [网络编程]运用socket实现本地通信

    功能实现 基于socket文件 xff0c 进行数据传递 xff0c 实现服务器与客户端之间进行本地通信 设计思路 服务器 创建socket套接字将socket套接字关联到socket文件 xff0c 实现绑定并创建套接字文件此时 xff0
  • 学东西要先看这个东西能给你提供什么功能,作东西要明白自己要实现什么功能!一定要耐下性子!

    学东西不要急匆匆去学 xff0c 首先要明白你要学的这个东西它能给你提供什么功能 xff0c 然后再去学这些功能怎么应用 xff0c 怎么实现的 xff0c 甚至 xff0c 只去学习自己需要使用的功能 作东西也不要匆匆就去作 xff0c
  • Linux系统 搭建gitlab仓库服务器

    安装依赖工具 安装技术依赖 yum span class token function install span y span class token function curl span policycoreutils python op
  • chmod +x 与chmod +777的区别

    对于chmod 43 x 脚本 来说就是将脚本改为可执行状态 xff0c 在linux因高亮语法 xff0c 会让file文件显示加黑 对于灰色的文件来说 xff0c 没有可执行的权限 xff0c 这是若我们给它chmod 43 x后它将会
  • 多线程编程实例(使用CompletableFuture)

    关键配置 xff1a 代理类对象 YrSyncWrService yrSyncWrServiceProxy 获取代理类的对象 xff0c 调用本类方法时 xff0c 注解才会生效 比如 64 Async多线程 xff0c 64 Transa
  • redis实现布隆过滤器

    Redis是一种基于内存的数据存储系统 xff0c 具有高性能 高可用性 高扩展性等特点 xff0c 因此被广泛用于实现布隆过滤器 以下是一种基于Redis实现布隆过滤器的方案 xff1a 创建一个长度为m的位数组 xff08 bit ar
  • jansson+freertos遇到的问题

    最近需要在stm32 43 freertos环境中 xff0c 使用json格式组包通信 xff0c 于是按照https blog csdn net yannanxiu article details 52712723 帖子中说的 xff0
  • 数据结构与算法C++实现8:递归的排列组合(Permutations)

    1 abc 经过排列组合有八种 abc acb bac bca cab cba 2 要点 xff1a void Permutations char p const int k const int m b开头的 xff0c 后面跟着c所有的排