栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C++ 全排列函数next

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C++ 全排列函数next

概述

C++的STL提供了两个用来计算全排列的函数,分别是next_permutation和prev_permutation
next_permutation是返回大于当前排列的所有排列方式,prev_permutation是返回小于当前排列的所有排列方式
在使用这两种函数之前,需要先对序列进行排序
考虑三个字符{a,b,c}所组成的所有序列
这个序列有6个可能的组合,abc, acb, bac,bca,cab,cba 这些排列组合根据less-than操作符做字典顺序的排列

用例

1.输出序列{1,2,3,4}字典序的全排列
因为要返回比当前序列更大的序列,所以我们要对原序列进行从小到大排列

#include
using namespace std;
int main()
{
	
 int a[4]={1,2,3,4};
 sort(a,a+4);
 do
 {
 	for(int i=0;i<4;i++)
 	{
	 	cout< 
 

我们再来看一下prev_permutation
因为要返回比当前序列小的序列,所以我们需要对原序列进行从大到小排序

#include
using namespace std;
int main() {

	int a[4] = {1, 2, 3, 4};
	sort(a, a + 4, greater());
	do {
		for (int i = 0; i < 4; i++) {
			cout << a[i] << " ";
		}
		cout << endl;
	} while (prev_permutation(a, a + 4));
}
 

2.任意输入一个字符串,输出其字典序的全排列

#include
using namespace std;
int main()
{
 string s;
 cin>>s;
 sort(s.begin(),s.end());
 do
 {
 	cout< 
abcd
abdc
acbd
acdb
adbc
adcb
bacd
badc
bcad
bcda
bdac
bdca
cabd
cadb
cbad
cbda
cdab
cdba
dabc
dacb
dbac
dbca
dcab
dcba
#include
using namespace std;
int main()
{
 string s;
 cin>>s;
 sort(s.begin(),s.end(),greater());
 do
 {
 	cout< 
dcba
dcab
dbca
dbac
dacb
dabc
cdba
cdab
cbda
cbad
cadb
cabd
bdca
bdac
bcda
bcad
badc
bacd
adcb
adbc
acdb
acbd
abdc
abcd

3.例如7个数的集合{,2,3,4,5,6,7},要求输出第1654个排列

#include 
#include
using namespace std;
 
int main(int argc, char** argv) {
	int a[7]={1,2,3,4,5,6,7};
	sort(a,a+7); 
	int n=1;//用do-while循环,n要从1开始
	do{
		if(n==1654){
		    for(int i=0;i<7;i++)
              cout<
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/784023.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号