我正在尝试用 C++ 实现 Heap 的算法。
但是,如果要置换的字符串的长度达到 4,算法就会开始重复。代码如下:
void permute(int n, string str, int *total,string array[]){
if (n==0){
array[*total] = str;
*total += 1;
}
else{
for(int c=0; c<=n;c++){
permute(n-1,str,total, array);
if (n % 2 == 0){
char tmpstr=str[c];
str[c]=str[n];
str[n]=tmpstr;
}
else{
char tmpstr=str[0];
str[0]=str[n];
str[n]=tmpstr;
}
}
}
}
int main() {
int total = 0;
string array[24];
permute(3,"abcd",&total, array);
cout << total << endl;
return 0;
}
这是输出。它在第 13 行重复
24
abcd
bacd
cbad
bcad
cabd
acbd
dbca
bdca
cbda
bcda
cdba
dcba
abcd <-- right here
bacd
cbad
bcad
cabd
acbd
dbca
bdca
cbda
bcda
cdba
dcba
谢谢你们,欢迎任何帮助!
最佳答案
虽然使用 PaulMcKenzie 推荐的标准函数总是一个绝妙的主意,但您已经发布了一个代码,其中包含一个问题,即为什么它不起作用。
在你的 for 循环中,删除行 if (n%2 ==0)
及其 else 部分:
for(int c=0; c<=n;c++){
permute(n-1,str,total, array);
char tmpstr=str[c];
str[c]=str[n];
str[n]=tmpstr;
}
然后它应该可以工作了。
关于c++ - 堆在 C++ 中的算法重复?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24786818/