如何将next_permutation用于一个排列

时间:2015-10-21 03:43:39

标签: c++

如何在c ++中使用next_permutation算法来获得数字的下一个排列而不是所有下一个排列。

例如:如何将1 2 6 4 5改为1 2 6 5 4。

2 个答案:

答案 0 :(得分:1)

if(next_permutation(myints,myints+n))
   //print them;
else
{
   //this is the first permutation..no higher permutation.
   //you may print it or something else..
}

来自参考:如果函数可以确定下一个更高的排列,它会重新排列元素并返回true。如果那是不可能的(因为它已经处于最大可能的排列),它会根据第一个排列重新排列元素(按升序排序)并返回false。

只需运行一次,然后检查返回值......这就是全部。请尝试查看手册一次。

示例代码

int main(){
   vector<int> v;
   // get the vector elements

  if (next_permutation(v.begin(), v.end()))
     for(vector<int>::iterator it=v.begin();it!=v.end();it++)
         cout<<*it<<endl;
  else
  {
     cout<<"No higher permutation";
     cout<<"initial permutation: "<<endl;
     //....
  }
 return 0;
}

答案 1 :(得分:0)

你应该在问之前尝试过。

#include <iostream> 
#include <algorithm> 

using namespace std;

int main () {
  int myints[] = {1, 2, 6, 4, 5};
  next_permutation(myints,myints+5);
  cout << myints[0] << ' ' << myints[1] << ' ' << myints[2] << ' ' << myints[3] << ' ' << myints[4] << '\n'; 
  return 0;
}

如果您想检查下一个排列是否存在,您应该使用:

if (next_permutation(myints, myints + n))