我有一个家庭作业,其中一部分要求是递归计算整数0-9的所有排列。这位教授实际上为我们提供了该部分问题的算法。我已经完成了剩下的工作,但是我无法让permute函数正常工作……我正在实现它,就像在工作分配信息中显示的一样。但是,当我运行它时,每个排列都会重复多次(而且我不确定是否可以得到所有正确的排列。)

我认为他一定在作业说明上犯了一个错误。我已经为此工作了几个小时,似乎无法弄清楚我要去哪里。有人可以帮我指出正确的方向吗?

这是当前代码:

void permute(int v[], int curr) {
    for (int i = curr; i < MAX; i++) {
        swap(v[i], v[curr]);
        permute(v, curr + 1);
        swap(v[curr], v[i]);
    }
}


编辑:实际上,在发布此消息后,我立即意识到与交换有关,对吗?因为现在我和curr是相同的,所以我要交换相同的数字。嗯,应该是swap(v [i],v [curr + 1])吗?

最佳答案

包装我的评论(似乎可以解决OP的问题)作为答案:

(1)当达到最大值时,您可能需要打印阵列:

if (curr == MAX) //print array


(2)您可能想计算得到的排列数量,可以通过使用static int [或全局变量或附加参数int& count]-并在curr == MAX时增加它来实现。印刷]。

关于c++ - C++:递归计算数字0-9的所有排列,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9853718/

10-11 22:40
查看更多