【发布时间】:2015-03-17 23:02:36
【问题描述】:
我正在尝试在 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
【问题讨论】:
-
您可能不希望
gen(vector<int> v,int n)按值传递v,是吗? -
考虑到函数本身会打印结果,这并不像乍一看那么愚蠢。
-
@WhozCraig 我做错了吗?
-
@MSalters 将不胜感激,如果您能提供帮助,无论多么愚蠢。我被困在这里了。
-
@edbale 我只是在问。你的意图是
gen修改调用者的向量吗?如果是这样,是的,你做错了。如果没有,那么没有。
标签: c++ algorithm permutation heaps-algorithm