在C ++中实现Heap算法

时间:2015-01-19 20:40:35

标签: c++ algorithm permutation

我正在尝试在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

1 个答案:

答案 0 :(得分:4)

Wiki页面显示代码中缺少if-else。你所拥有的if完全不同。

另外,我会在cout之后添加std::endl,并尝试使用输入1 2 3 4。链接的文章有一个逐行的算法,该算法运行4个元素。