【发布时间】:2011-08-02 19:57:41
【问题描述】:
这是一个打印字符串字符排列的标准函数:
void permute(char *a, int i, int n)
{
int j;
if (i == n)
printf("%s\n", a);
else
{
for (j = i; j < n; j++) //check till end of string
{
swap((a+i), (a+j));
permute(a, i+1, n);
swap((a+i), (a+j)); //backtrack
}
}
}
void swap (char *x, char *y)
{
char temp;
temp = *x;
*x = *y;
*y = temp;
}
它工作正常,但有一个问题,它还会打印一些重复的排列,例如:
如果字符串是“AAB”
输出是:
AAB
ABA
AAB
ABA
BAA
BAA
这也有 3 个重复条目。
有办法防止这种情况发生吗?
--
谢谢
阿洛克克。
【问题讨论】:
-
正在使用 std::set 不需要的开销?
-
听起来像是功课。如果是的话,你应该这样标记它。
-
先生,这不是家庭作业,我只是在研究一些标准算法,我遇到了这个问题。还要感谢 std::set 因为我在 c++ 中不太好所以不知道。
标签: c++ c algorithm permutation