关于全排列

Posted new-ljx

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于全排列相关的知识,希望对你有一定的参考价值。

嗯...

 

关于全排列,有很多种种做法...

 

嗯....

 

那什么叫全排列呢??!!

 

从n个不同元素中任取m(m≤n)个元素,按照一定的顺序排列起来,叫做从n个不同元素中取出m个元素的一个排列。当m=n时所有的排列情况叫全排列。(来自度娘

 

在这里介绍全排列,主要是引进c++种STL库中的鬼畜东西:

 

next_permutation        prev_permutation

 

这两个东西很冷门....但对于全排列来时却是十分好用....

 

下面就结合着代码做一道全排列来介绍这两个东西:

 1 #include<cstdio>
 2 #include<iostream>
 3 #include<algorithm>
 4 
 5 using namespace std;
 6 
 7 int n,z[1234];
 8 
 9 int main()
10 {
11     cin >> n;
12     for (int a=1;a<=n;a++)
13         z[a] = a;
14     //注意在用 next_permutation和prev_permutation都要用do-while 循环,因为它不管是否满足,都要先将当前的排列进行一次输出操作 
15     do
16     {
17         for (int a=1;a<=n;a++)
18             cout << z[a] << " "; 
19         cout << endl;
20     }while (next_permutation(z+1,z+n+1));//右端点多1,左闭右开 
21 }

 

好,上面主要介绍了next_permutation ,那么prev_permutation 是什么呢???

 

其实prev_permutation 就是与next_permutation做相反操作  

 

next_permutation 为找到当前下一个的排列是什么
prev_permutation 为找到当前上一个的排列是什么

 

可以自己调试一下....

 


以上是关于关于全排列的主要内容,如果未能解决你的问题,请参考以下文章

算法——全排列

Java使用递归实现全排列的代码

常见的算法问题全排列

16.全排列(深度搜索的详细记录)

关于全排的递归算法

关于各种排列组合java算法实现方法