Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/156.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++ 这个置换码的实际算法是什么(用简单的英语)?_C++ - Fatal编程技术网

C++ 这个置换码的实际算法是什么(用简单的英语)?

C++ 这个置换码的实际算法是什么(用简单的英语)?,c++,C++,首先介绍一下背景知识: 我是一名业余程序员,有Mathematica(最近还有Haskell)编程的背景,主要围绕Codeabbey问题 最近,我一直在尝试实现一个重复排列生成代码,这是一个程序,给定一个输入编号,它将生成考虑重复编号的排列列表。例如,如果我输入58883,它将只输出20个数字(5!/3!),而不是120 我注意到,这个答案中的代码正是这样做的,我可以确认它在资源方面做得非常好,因为我可以用g++编译并运行它 除此之外,我对C语言一无所知,我不明白代码是如何工作的。我相信代码的核

首先介绍一下背景知识:

我是一名业余程序员,有Mathematica(最近还有Haskell)编程的背景,主要围绕Codeabbey问题

最近,我一直在尝试实现一个重复排列生成代码,这是一个程序,给定一个输入编号,它将生成考虑重复编号的排列列表。例如,如果我输入58883,它将只输出20个数字(5!/3!),而不是120

我注意到,这个答案中的代码正是这样做的,我可以确认它在资源方面做得非常好,因为我可以用g++编译并运行它

除此之外,我对C语言一无所知,我不明白代码是如何工作的。我相信代码的核心就在这几行代码中

    while (*q) {
        if (used.find(*q) == used.end()) {
            std::swap(*p, *q);
            perm(str, index + 1);
            std::swap(*p, *q);

            used.insert(*q);
        }


使用递归和集合的概念。除此之外,我迷路了

那么,有人能给我解释一下这个算法是如何工作的吗,意思是解释计算机应该遵循的步骤,用简单的英语,独立于语言语法,在这种情况下集合有什么作用


非常感谢!祝你有愉快的一天

这套装置是用来防止复制品进入的。对于字符串中的每个位置,程序都会保留一组已在该索引中尝试过的字符。但是当程序回溯时,它会以一个空的集合重新开始。