next_permutation()函数的原理与运用。

next_permutation()原理与运用
next_permutation函数,他的函数原型是

     #include <algorithm>

     bool next_permutation(iterator start,iterator end)

此函数求的是当前排列的下一个排列。这里的“下一个”,我们可以把它理解为序列的字典序的前后。
当当前序列不存在下一个排列时,函数返回false,否则返回true

例如输出1 2 3的全排列

#include <iostream>
#include <algorithm>
using namespace std; 
 
int main() 
{
    int num[3]={1,2,3};
    while(next_permutation(num,num+3))
    {
	cout<<num[0]<<" "<<num[1]<<" "<<num[2]<<endl;
    }
    return 0;
}

此时的结果是:
next_permutation()函数的原理与运用。
因为是输出当前排列的下一个排列,所以没有输出1 2 3.
如果想要输出1 2 3.
可以参考下面的代码。

  #include <iostream>  
    #include <algorithm>  
    using namespace std;  
    int main()  
    {  
        int num[3]={1,2,3};  
        do  
        {  
            cout<<num[0]<<" "<<num[1]<<" "<<num[2]<<endl;  
        }while(next_permutation(num,num+3));  
        return 0;  
    }  

next_permutation()函数的原理与运用。
还应该注意的是,next_permutation()在使用前需要对欲排列数组按升序排序,否则只能找出该序列之后的全排列数。
例如:

#include <iostream>
#include <algorithm>
using namespace std;
int main()
{
    int num[3]={2,1,3};
    do
    {
        cout<<num[0]<<" "<<num[1]<<" "<<num[2]<<endl;
    }while(next_permutation(num,num+3));
    return 0;
}

此时数组为2,1,3
输出的结果为
next_permutation()函数的原理与运用。
所以next_permutation()在使用前需要对欲排列数组按升序排序。

#include <iostream>
#include <algorithm>
using namespace std;
int main()
{
    int num[3]={1,2,3};
    do
    {
        cout<<num[0]<<" "<<num[1]<<" "<<num[2]<<endl;
    }while(next_permutation(num,num+2));
    return 0;
}

我们将

while(next_permutation(num,num+3));

改成了

while(next_permutation(num,num+2));

此时输出为
next_permutation()函数的原理与运用。

可以看出:next_permutation(num,num+n)函数是对数组num中的前n个元素进行全排列,同时并改变num数组的值。

上一篇:MySQL之profiling性能优化


下一篇:photoshop利用滤镜制作出漂亮的蓝色海景图