生成字符串矢量的所有组合
问题描述:
我试图解决一些UVA的问题,我想生成一个字符串数组的所有可能的组合。例如:生成字符串矢量的所有组合
string str[]={"abcd","efg","hij"};
所以程序必须打印:
>abcd efg hij
>abcd hij efg
>hij abcd efg
>hij efg abcd
>efg abcd hij
>efg hij abcd
答
我认为你正在寻找STL的next_permutation算法。
适用于您的例子,它应该是这个样子:
std::sort (str, str+3);
std::cout << "The 3! possible permutations with 3 elements:\n";
do {
std::cout << str[0] << ' ' << str[1] << ' ' << str[2] << '\n';
} while (std::next_permutation(str, str+3));
+0
为什么在循环之前调用std :: sort()。在这种情况下需要吗?因为我们正在寻找数组中所有字符串的排列方式,所以在这种情况下需要预先排序? – goldenmean 2013-03-11 11:58:47
+0
我相信算法会根据元素是否排序来确定它是否完成。因此,如果您之前未对其进行排序,则可能无法获得所有排列,因为算法认为排序后就完成了排列。 – tehlexx 2013-03-11 13:07:52
你还需要打印涉及阵列中的所有项目并非排列,如'EFG hij','HIJ efg',和'hij',比如? – angelatlarge 2013-03-09 19:17:02
你想排列,而不是组合。 – *user2010 2013-03-09 20:38:37