Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/131.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++;不按相反顺序列出的下一个\u排列 < >在C++中,用< NExtx置换> />代码,可以省略所有排列顺序都已发生颠倒的排列。例如,在打印了{1,2,3,4}之后,它不应该打印{4,3,2,1}_C++_Permutation - Fatal编程技术网

C++;不按相反顺序列出的下一个\u排列 < >在C++中,用< NExtx置换> />代码,可以省略所有排列顺序都已发生颠倒的排列。例如,在打印了{1,2,3,4}之后,它不应该打印{4,3,2,1}

C++;不按相反顺序列出的下一个\u排列 < >在C++中,用< NExtx置换> />代码,可以省略所有排列顺序都已发生颠倒的排列。例如,在打印了{1,2,3,4}之后,它不应该打印{4,3,2,1},c++,permutation,C++,Permutation,只要排列中的第一个元素在字典上小于最后一个元素,就不会得到任何在反转时会重复的排列: std::vector<int> v {1, 2, 3, 4}; do { if (v.front() < v.back()) { // first less than last std::copy(v.begin(), v.end(), std::ostream_iterator<int>(std::cout, " "

只要排列中的第一个元素在字典上小于最后一个元素,就不会得到任何在反转时会重复的排列:

std::vector<int> v {1, 2, 3, 4};

do {
    if (v.front() < v.back()) { // first less than last
        std::copy(v.begin(), v.end(),
                  std::ostream_iterator<int>(std::cout, " "));
        cout << '\n';
    }
}
while (std::next_permutation(v.begin(), v.end()));
std::向量v{1,2,3,4};
做{
如果(v.front()cout当您以递增顺序生成排列时,您可以简单地忽略任何最后一项小于第一项的排列(其反面已经列出)


由于n个项目的排列数量为n!,消除一半不会影响big-O性能。

我不确定我是否理解您的问题。
1,2,3,4
是第一个字典排列,如果您使用
下一个\u排列
,它将打印
1,2,4,3
,而不是
4,3,2,1
。也许您要求的是对于Python,上的答案提供了一些很好的解释。