2013-03-09 72 views
1

我试图解决一些UVA的问题,我想生成一个字符串数组的所有可能的组合。例如:生成字符串矢量的所有组合

string str[]={"abcd","efg","hij"}; 

所以程序必须打印:

>abcd efg hij 
    >abcd hij efg 
    >hij abcd efg 
    >hij efg abcd 
    >efg abcd hij 
    >efg hij abcd 
+0

你还需要打印涉及阵列中的所有项目并非排列,如'EFG hij','HIJ efg',和'hij',比如? – angelatlarge 2013-03-09 19:17:02

+0

你想排列,而不是组合。 – stackoverflowuser2010 2013-03-09 20:38:37

回答

1

我认为你正在寻找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