如何在c ++中使用next_permutation算法来获得数字的下一个排列而不是所有下一个排列。
例如:如何将1 2 6 4 5改为1 2 6 5 4。
答案 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))