Есть ли способ распечатать все перестановки, опуская перестановки, которые уже встречаются в обратном порядке, используя next_permutation
в C++. Например, после печати {1, 2, 3, 4}
он не должен печатать {4, 3, 2, 1}
.C++ next_permutation без листинга в обратном порядке
0
A
ответ
2
Пока первый элемент перестановки лексикографически меньше последнего элемента, вы не получите никаких перестановок, которые будут дублировать при обратном:
std::vector<int> v {1, 2, 3, 4};
do {
if (v.front() < v.back()) { // first less than last
std::copy(v.begin(), v.end(),
std::ostream_iterator<int>(std::cout, " "));
cout << '\n';
}
}
while (std::next_permutation(v.begin(), v.end()));
0
При генерации перестановок в порядке возрастания последовательности вы можете просто опустить любую перестановку, последний элемент которой меньше ее первого элемента (его обратный уже указан).
Поскольку число перестановок п элементов является п!, Избавляя половина не влияет на производительность большой-O.
Смежные вопросы
- 1. перечислены в обратном порядке
- 2. MySQL в обратном порядке без DESC
- 3. Дженерики в обратном порядке?
- 4. C# Список файлов в обратном порядке. (Без использования Linq)
- 5. Разделить строку в обратном порядке C++
- 6. C# [xy] диапазон в обратном порядке
- 7. Изменить цвет списка в обратном порядке C#
- 8. C# Regex Range в обратном порядке
- 9. C++ сохранение строки в обратном порядке
- 10. C: как распечатать список в обратном порядке?
- 11. Как пересечь C# LinkedList в обратном порядке
- 12. стек в обратном порядке
- 13. подзаголовки в обратном порядке
- 14. FrameLayout в обратном порядке
- 15. unpickle в обратном порядке
- 16. воспроизведение в обратном порядке
- 17. Object.keys в обратном порядке
- 18. строка в обратном порядке
- 19. Показать параметры в обратном порядке
- 20. Итерационные потоки в обратном порядке
- 21. Чтение файлов в обратном порядке
- 22. Добавить вкладки в обратном порядке?
- 23. Чтение строки в обратном порядке
- 24. проблема next_permutation C++
- 25. C++ next_permutation function
- 26. next_permutation в C++ по строкам
- 27. Печать в порядке и обратном порядке
- 28. Ошибка в обратном порядке слов
- 29. Перечислить квантиль в обратном порядке
- 30. Чтение файла в обратном порядке
Я не уверен, что понимаю вашу проблему. '1,2,3,4' - первая лексикографическая перестановка, если вы используете' next_permutation', она будет печатать '1,2,4,3', а не' 4,3,2,1'. Возможно, вы просите [комбинации] (http://marcodiiga.github.io/permutations-and-combinations/)? –
Хотя для Python ответы на [этот вопрос] (http://stackoverflow.com/q/960557/2675154) содержат несколько полезных объяснений. – honk