перестановочные вычисления в с ++ - PullRequest
0 голосов
/ 29 сентября 2011

Я хочу написать программу, которая получает целое число n и печатает все перестановки 1,2, ..., n.Я знаю, что есть рекурсивный способ сделать это, и я знаю накладные расходы на вызовы функций.Есть ли способ сделать это без рекурсии ??

Ответы [ 2 ]

4 голосов
/ 29 сентября 2011

Да, вы можете сделать это итеративно с std::next_permutation из <algorithm> в качестве условия while, или в зависимости от того, как вы настроили цикл, это может быть одним из случаев, когда do...while более подходит.

0 голосов
/ 29 сентября 2011
#include <vector>
#include <algorithm>

std::vector<int> v = { 1,2,3,4,5,6,7,8,9,10 }; // see std::iota also


// important: sort v if not sorted
std::sort(v.begin(), v.end());

while (std::next_permutation(v.begin(), v.end()))
{
      // use v (unique permutation)
}
// use v: first sorted position
...