получение всех комбинаций из чисел без повторения - PullRequest
3 голосов
/ 10 января 2011

привет Я работаю с C ++, могу ли я найти простой способ получить массив из набора чисел, содержащих все возможные комбинации между например: {1,2,3}

  { {3,1,2},
   {1,2,3},
   {3,2,1},
   {1,3,2},
   {2,1,3},
   {2,3,1}
  };

проблема, если я получу 5 или более чисел, как сделать комбинацию 120

1 Ответ

7 голосов
/ 10 января 2011

Это перестановки, а не комбинации.

Вы можете использовать std::next_permutation для вычисления всех перестановок последовательности. Это будет выглядеть примерно так:

std::array<int, 3> data = { 1, 2, 3 };
do {
    // use current permutation
} while (std::next_permutation(data.begin(), data.end()));

(я использовал std::array из C ++ 0x для этого примера; вы также можете найти контейнер array в C ++ TR1 и в Boost. Этот алгоритм также работает с любым контейнером, который может быть двунаправленно итеративным, например std::vector.)

...