首页 > 技术文章 > 下一个排列/上一个排列-----全排列

A-FM 2016-03-22 19:30 原文

下一个排列 : next_permutation       只能从字典序的低向高 , 一个一个寻找出排列组合

上一个排列 : prev_permutation   只能从字典序的高向低 , 一个一个寻找出排列组合

 1 //  上一个排列  -------  字典序从大到小
 2 #include<stdio.h>
 3 #include<string.h>
 4 #include<math.h>
 5 #include<iostream>
 6 #include<algorithm>
 7 #include<queue>
 8 #include<vector>
 9 using namespace std;
10 bool cmp(int a,int b)
11 {
12     return a>b;
13 }
14 int main()
15 {
16     int n,p[10];
17     scanf("%d",&n);
18     for(int i=0;i<n;i++)
19         scanf("%d",&p[i]);
20     sort(p,p+n,cmp);
21     do
22     {
23         for(int i=0;i<n;i++)
24             printf("%d ",p[i]);
25         printf("\n");
26     }while(prev_permutation(p,p+n));
27     return 0;
28 }

写法也就是这样下面附上 下一个排列---

 1 //  下一个排列  字典序 由小到大的排列方式
 2 #include<stdio.h>
 3 #include<string.h>
 4 #include<math.h>
 5 #include<iostream>
 6 #include<algorithm>
 7 #include<queue>
 8 #include<vector>
 9 using namespace std;
10 int main()
11 {
12     int n,p[10];
13     scanf("%d",&n);
14     for(int i=0;i<n;i++)
15         scanf("%d",&p[i]);
16     sort(p,p+n);
17     do
18     {
19         for(int i=0;i<n;i++)
20             printf("%d ",p[i]);
21         printf("\n");
22     }while(next_permutation(p,p+n));
23     return 0;
24 }

推荐阅读