C ++:递归计算数字0 - 9的所有排列

时间:2012-03-24 17:11:41

标签: c++ permutation

我有一个家庭作业,其中部分要求是递归计算整数0-9的所有排列。教授实际上给了我们这部分问题的算法。我完成了其余的任务,但我无法使置换功能正常工作......我正在实现它,就像在分配信息上显示的那样。然而,当我运行它时,每次排列都会重复多次(我不确定我是否能得到所有正确的排列。)

我认为他肯定在作业指令上犯了错误。我一直在研究这个问题几个小时,似乎无法弄清楚我哪里出错了。任何人都可以帮助我指出正确的方向吗?

这是当前的代码:

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是一样的,所以我交换相同的数字。嗯,它应该是交换(v [i],v [curr + 1])?

1 个答案:

答案 0 :(得分:1)

将我的评论(似乎解决OP的问题)作为答案包裹起来:

(1)您可能希望在达到max:

时打印阵列
if (curr == MAX) //print array

(2)你可能想要计算你得到的排列数,你可以通过static int [或全局变量,或额外的参数int& count]来计算 - 并增加它只要curr == MAX [连同打印]。