在 C++ 中实现 Heap 的算法
Implementing Heap's algorithm in C++
我正在尝试用 C++ 实现 Heap's algorithm。我觉得我编写的代码完全符合算法的工作原理,但它给出了错误的结果。
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
void print(vector<int> v)
{
for(auto x:v)
cout<<x;
cout<<endl;
}
void gen(vector<int> v,int n)
{
if(v.size()==1)
cout<<v[0];
print(v);
int i = 0;
while(i<n)
{
gen(v,n-1);
if(n%2)
swap(v[n-1],v[0]);
else
swap(v[n-1],v[i]);
i++;
}
}
int main()
{
vector<int> v ={1,2,3};
gen(v,v.size());
}
我一直在尝试完成这项工作。
对于上面代码中的向量,它给出了荒谬的结果:
123
123
123
123
213
213
321
321
321
231
231
123
123
123
213
213
Wiki 页面显示您的代码中缺少 if-else
。您拥有的那个 if
做的事情完全不同。
此外,我会在 cout 后添加一个 std::endl
,然后尝试输入 1 2 3 4
。链接的文章有一个针对 4 个元素的算法 运行 的逐行示例。
我正在尝试用 C++ 实现 Heap's algorithm。我觉得我编写的代码完全符合算法的工作原理,但它给出了错误的结果。
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
void print(vector<int> v)
{
for(auto x:v)
cout<<x;
cout<<endl;
}
void gen(vector<int> v,int n)
{
if(v.size()==1)
cout<<v[0];
print(v);
int i = 0;
while(i<n)
{
gen(v,n-1);
if(n%2)
swap(v[n-1],v[0]);
else
swap(v[n-1],v[i]);
i++;
}
}
int main()
{
vector<int> v ={1,2,3};
gen(v,v.size());
}
我一直在尝试完成这项工作。 对于上面代码中的向量,它给出了荒谬的结果:
123 123 123 123 213 213 321 321 321 231 231 123 123 123 213 213
Wiki 页面显示您的代码中缺少 if-else
。您拥有的那个 if
做的事情完全不同。
此外,我会在 cout 后添加一个 std::endl
,然后尝试输入 1 2 3 4
。链接的文章有一个针对 4 个元素的算法 运行 的逐行示例。