从数字中获取所有组合而不重复

时间:2011-01-10 03:25:19

标签: c++ visual-c++ permutation visual-c++-2008

喜 我使用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 个答案:

答案 0 :(得分:7)

这些是排列,而不是组合。

您可以使用std::next_permutation计算序列的所有排列。它看起来像这样:

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

(我在这个例子中使用了来自C ++ 0x的std::array;你也可以在C ++ TR1和Boost中找到array容器。这个算法也适用于双向的任何容器可迭代的,如std::vector。)

相关问题