逆天的全排列函数next_permutation()

next_permutation 是算法库(<algorithm>)里的一个用于求全排列的函数,其定义为

next_permutation(_BidIt _First, _BidIt _Last)

可以看出,对于next_permutation需要可迭代容器的范围(即头尾),然后会根据字典序来对此序列来进行全排列并存储在原先的容器里,其排列顺序也是按照字典序输出的

注意,这里的“字典序”对于字符串是根据ASci码来比较,对于数字就是按照其大小来比较

给出个例子,可以看到对于1,2,3,其自动将其全排列求出并存在原数组中

而如果数组一开始就是别的序列呢,比如

 可以看到,next_permutation是非常智能的,可以识别当前排列并顺着字典序继续进行其下一个排列,不会重复

给出一个很好的例子

P1088 [NOIP2004 普及组] 火星人 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

这道题如果清楚的知道next_permutation可以直接输出其下一步的全排列,输出答案只需要三行代码---->读入,next_permutation M次,输出,这样的数组中存储的就是答案中的全排列

同理next_permutation相应的就是prev_permutation,其求的是对应容器中序列的上一个全排列

posted @ 2023-04-26 19:55  凪风sama  阅读(34)  评论(0编辑  收藏  举报