逆天的全排列函数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,其求的是对应容器中序列的上一个全排列