我正在尝试在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
答案 0 :(得分:4)
Wiki页面显示代码中缺少if-else
。你所拥有的if
完全不同。
另外,我会在cout之后添加std::endl
,并尝试使用输入1 2 3 4
。链接的文章有一个逐行的算法,该算法运行4个元素。