我有一个家庭作业,其中一部分要求是递归计算整数 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]);
}
}
编辑:实际上,在发布这个之后我意识到它与交换有关,对吧?因为现在 i 和 curr 是一样的,所以我要交换相同的数字。嗯,应该是swap(v[i], v[curr+1])吗?
最佳答案
将我的评论 [这似乎解决了 OP 的问题] 作为答案:
(1) 你可能想在达到最大值时打印你的数组:
if (curr == MAX) //print array
(2) 你可能想计算你得到的排列数,你可以通过一个static int
[或一个全局变量,或一个额外的参数int& count
] - 每当 curr == MAX
[连同打印] 时增加它。
关于C++:递归计算数字 0 - 9 的所有排列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9853718/