У меня есть вектор из N объектов, и я хотел бы перебирать все соседние перестановки этого вектора. То, что я называю сосед перестановку является перестановкой, где только два элемента исходного вектора будет изменен: , если у меня есть вектор с 'a','b','c','d'
затем:C++ перебирать все перестановки соседства
'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()
тогда я получу все возможные перестановки , а не только «соседние» ...
Вы не знаете, как это можно достичь?
Посмотрите на него в виде двоичного значения, где каждая запись является немного, а потом прочитать о [код Грея] (http://en.wikipedia.org/wiki/Gray_code). –
[std :: swap] (http://www.cplusplus.com/reference/algorithm/swap/)? –
Обычным математическим термином для этих «соседних перестановок» являются транспозиции. https://en.wikipedia.org/wiki/Cyclic_permutation#Transpositions – Goens