全排列(下一个排列,算法)

给出一个字符串S(可能有重复的字符),按照字典序从小到大,输出S包括的字符组成的所有排列。例如:S = “1312”,
输出为:

1123
1132
1213
1231
1312
1321
2113
2131
2311
3112
3121
3211
Input
输入一个字符串S(S的长度 <= 9,且只包括0 - 9的阿拉伯数字)
Output
输出S所包含的字符组成的所有排列
Input示例
1312
Output示例
1123
1132
1213
1231
1312
1321
2113
2131
2311
3112
3121
3211

说一下 STL:
STL 容器是一些模板类,提供了多种组织数据的常用方法,例如vector(向量,类似于数组)、list(列表,类似于链表)、deque(双向队列)、set(集合)、map(映象)、stack(栈)、queue(队列)、priority_queue(优先队列)等,通过模板的参数我们可以指定容器中的元素类型。
STL 算法是一些模板函数,提供了相当多的有用算法和操作,从简单如for_each(遍历)到复杂如stable_sort(稳定排序)。
STL 迭代器是对C 中的指针的一般化,用来将算法和容器联系起来。几乎所有的STL 算法都是通过迭代器来存取元素序列进行工作的,而STL 中的每一个容器也都定义了其本身所专有的迭代器,用以存取容器中的元素。有趣的是,普通的指针也可以像迭代器一样工作。 熟悉了STL 后,你会发现,很多功能只需要用短短的几行就可以实现了。通过STL,我们可以构造出优雅而且高效的代码,甚至比你自己手工实现的代码效果还要好。
STL 的另外一个特点是,它是以源码方式免费提供的,程序员不仅可以自由地使用这些代码,也可以学习其源码,甚至按照自己的需要去修改它。
在C++标准中,STL 被组织为以下的一组头文件(注意,是没有.h 后缀的!):
algorithm / deque / functional / iterator / list / map/memory/numeric/queue/set/stack/utility/vector/

/*算法中的下一个排列,用到了STL中的库函数 next_permutation()
是STL 中专门用于排列的函数(可以处理存在重复数据集的排列问题
用法是 next_permutation(star,end),
函数要求输入的是一个升序排列的序列的头指针和尾指针,分别是 star,end*/
#include<iostream>
#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
int main()
{
    int i,n;
    char s[12];
    gets(s);
    n=strlen(s);
    sort(s,s+n);
    do{
        pus(s);
        printf("\n");
    }while(next_permutation(s,s+n));
}

猜你喜欢

转载自blog.csdn.net/jkdd123456/article/details/80151561