竞赛中关于排列问题可能会使用到next_permutation函数的一个全排列,但是仍然需要掌握基本的排列的递归写法,下面简单介绍一下用法。(直到如何使用即可)

next_permutation函数将按字母表顺序生成给定序列的下一个较大的排列,直到整个序列为降序为止。
prev_permutation函数与之相反,是生成给定序列的上一个较小的排列。二者原理相同,仅遍例顺序相反

1.STL中的next_permutation 用法
2.全排列的递归写法

1.使用STL里面的函数进行全排列:(全排列前要需要排序才行)

数字排序:

#include<stdio.h>
#include<algorithm>
using namespace std;
int main(){char a[] = {1,2,3};sort(a,a+3);do{for(int i = 0;i < 3;i++) printf("%d ",a[]);printf("\n");}while(next_permutation(a,a+3));return 0;
}

输出结果:

123
132
213
231
321
312

字符串全排列:

#include<stdio.h>
#include<algorithm>
using namespace std;
//int cmp(const void *a,const void *b){//  return *(char *)a-*(char *)b;
//}
int main(){char a[] = "132";sort(a,a+3);//C++
//  qsort(a,3,sizeof(a[0]),cmp);//C do{printf("%s\n",a);}while(next_permutation(a,a+3));return 0;
}

输出结果:

123
132
213
231
321
312

结构体的全排序
解释一下,结构体也可以通过写 cmp 函数实现全排列,

next_permutation(node,node+n,cmp)

也可以借助下标进行全排列

#include<stdio.h>
#include<algorithm>
using namespace std;
const int Maxn = 3;
struct Node{int x;
}a[100];
int q[100];
int main(){for(int i = 1;i <= Maxn;i++){a[i].x = q[i] = i; //让结构体元素按照正常顺全排列
//      a[Maxn-i+1] = q[i] = i;  //顺序将会相反 }do{for(int i = 1;i <= Maxn;i++) printf("%d ",a[q[i]].x);printf("\n");}while(next_permutation(q+1,q+Maxn+1));return 0;
}

这个是STL中的源码可以参考一下,它的是非递归写法,下面会说到递归写法。参考链接

2.全排列的递归写法

#include <iostream>
using namespace std;
void get_permutation(char *a, int idx, int length)  //左下标和长度值,从头循环到尾
{if (idx == length-1){for (int i=0; i<length; ++i)printf("%s ",a);printf("\n");}else {for (int i=idx; i<length; ++i){swap(a[i],a[idx]);get_permutation(a,idx+1,length);swap(a[i],a[idx]);}}
}
int main()
{char array[] = "123";get_permutation(array,0,3);return 0;
}

输出结果:

123
132
213
231
321
312

最后:
next_permutation(num,num+n)函数是对数组num中的前n个元素进行全排列,同时并改变num数组的值。

另外,需要强调的是,next_permutation()在使用前需要对欲排列数组按升序排序,否则只能找出该序列之后的全排列数。

简单用法就是上面局的例子,时间复杂度是在 O(n!) ~ O(n∗n!) 之间,还是比较花时间的,所以慎用(蓝桥杯中用法会比较多)
参考链接

组合数学-next_permutation全排列相关推荐

  1. STL/next_permutation()和prev_permutation()函数

    next_permutation()和prev_permutation()函数的使用: next_permutation()和prev_permutation()函数的头文件添加为:#include  ...

  2. 1455E Four Points(思维+全排列)

    1455E Four Points(思维+全排列) Educational Codeforces Round 99 (Rated for Div. 2) E. Four Points 题面:Four ...

  3. HUST 1586 数字排列

    1586 - 数字排列 时间限制:1秒 内存限制:128兆 91 次提交 36 次通过 题目描述 现有n个k位的数字,你的任务是重新安排数字每一位的位置,使得重新安排后这n个数字中最大的数字和最小的数 ...

  4. 蓝桥杯C++ AB组辅导课

    整理的算法模板合集: ACM模板 今天在AcWing闲逛白嫖到了yxc老师的蓝桥杯C++ AB组辅导课的题单,正好快要蓝桥杯了,我准备每天花半个小时刷5道这个题单里的水题,练一练,不然到时候我各种花里 ...

  5. 【2019暑假刷题笔记-STL绪论(二)】总结自《算法笔记》

    目录 五.queue的常见用法 六.priority_queue的常见用法 七.stack的常见用法 八.algorithm头文件下的常用函数 五.queue的常见用法 queue也就是队列,是STL ...

  6. ACM/OI中C++常用优化(实用/调试/技巧)代码(语法)

    一.C++万能编译头文件 #include<bits/stdc++.h> 从 #include <iostream> #include <cstdio> #incl ...

  7. 【简便代码+解析】1056 组合数的和 (15分)_14行代码AC

    立志用更少的代码做更高效的表达 Pat乙级最优化代码+题解+分析汇总-->传送门 给定 N 个非 0 的个位数字,用其中任意 2 个数字都可以组合成 1 个 2 位的数字.要求所有可能组合出来的 ...

  8. 第十七届“科大讯飞杯”高校网络友谊赛——F-排列计算

    F-排列计算 题目描述 天才程序员菜哭武和石头组队参加一个叫做ICPC的比赛,这个比赛的规则是这样的: 一个选手给出一个长度为 n 的排列,另一个选手给出 m 个询问,每次询问是一个形如 (l, r) ...

  9. 十大算法基础——上(共有25道例题,大多数为简单题)

    一.枚举(Enumerate)算法 定义:就是一个个举例出来,然后看看符不符合条件. 举例:一个数组中的数互不相同,求其中和为0的数对的个数. for (int i = 0; i < n; ++ ...

最新文章

  1. vue2.0小示例一个~~新鲜出炉哦。欢迎大家留言
  2. 大学医用计算机答案,医学文献检索试题(含答案)
  3. C语言 文件操作5--文件的常用函数
  4. 如何优雅地进行错误处理(clean code阅读笔记之六)
  5. kubernetes-[1]-简单介绍
  6. python运维脚本面试_参加Linux运维面试时经常会被问到的shell脚本问题有哪些?
  7. jsp注册里密码强弱怎么弄_JavaScript注册时密码强度校验代码
  8. opencv图像灰化_Opencv——彩色图像灰度化的三种算法
  9. idea项目中使用URule 规则引擎的简单例子
  10. scratch的官方版本和其他的改编版本/小喵科技Kittenblock/snap!/TurboWarp
  11. python3 输出不换行
  12. css -moz_moz-border-radius(CSS属性)
  13. [电影]推荐《启示》--完美的玛雅文化背景
  14. 基于Python的个人足迹地图绘制设计
  15. 网易滑块识别-通用滑块识别
  16. 缓解环境噪声对音频质量干扰
  17. 他是学计算机的这个句子中宾语是动词性的,语法一实词(教师)2017级
  18. 一文详解:java开发安卓应用
  19. 区块链技术 英文(BlockChain Terminal)简称BCT ——区块链终端
  20. 怎么调用android 自带的图片浏览器

热门文章

  1. HEVC中的去方块滤波——Deblocking Filter
  2. 【基础】什么是视锥体
  3. linux cs go鼠标灵敏度,【游久】CSGO快速进阶 寻找合适自己的鼠标灵敏度
  4. Unity鼠标悬停实现图片的浮动效果
  5. 二分法-网易有道2013年校园招聘面试一面试题
  6. C语言字符串赋值的方法
  7. 2010年南非世界杯八强冠亚军大预测(2010年6月28日)
  8. 2010款15寸Macbook Pro GPU panic崩溃问题解决方案
  9. 数据结构,为何是工程师最重要的基本功?
  10. 环信3即时通信——web端sdk简单集成(一)(文本消息)