【发布时间】:2015-06-04 12:14:02
【问题描述】:
我有一个包含 N 个对象的向量,我想遍历该向量的所有相邻排列。我所说的邻居排列是一种排列,其中原始向量的只有两个元素会被改变:
如果我有一个带有'a','b','c','d' 的向量,那么:
'b','a','c','d' //is good
'a','c','b','d' //is good
'b','a','d','c' //is not good (2 permutations)
如果我使用std::next_permutation(myVector.begin(), myVector.end(),那么我将获得所有可能的排列,而不仅仅是“邻居”排列...
您知道如何实现吗?
【问题讨论】:
-
把它看成一个二进制值,其中每个条目是一个位,然后读一下gray code。
-
那些“邻居排列”的常用数学术语是转置。 en.wikipedia.org/wiki/Cyclic_permutation#Transpositions
标签: c++ permutation