C++排列函数

https://blog.csdn.net/m0_37890541/article/details/105104045

#include <iostream>
#include <cstring>
#include <algorithm>

using namespace std;

const int MAXN = 6;
char arr[MAXN];

int main ()
{
	while (cin >> arr) {
		sort(arr, arr + strlen(arr));							// 输入字符串先按升序排好
		cout << arr << endl;									
		while (next_permutation(arr, arr + strlen(arr))) {		// 求全排列 
			cout << arr << endl;
		}		
		cout << endl;	
	}
	return 0;
}

例:
输入:abc
输出:abc acb bac bca cab cba		// 偷懒~~未换行

“下一次排序”:在字典次序中,当前排列的下一个排列,比如:{a,b,c,d}的下一次排序为{a,b,d,c}
“上一次排序”:在字典次序中,当前排列的上一个排列,比如:{a,b,d,c}的下一次排序为{a,b,c,d}

bool next_permutation(begin, end)		// 函数会改变[begin,end)区间内元素次序,使它们符合"下一次排列次序",默认为按字典次序升序

bool next_permutation(begin, end, op)	// op为自定义排列次序

bool prev_permutation(begin, end)		// 函数会改变[begin,end)区间内元素次序,使它们符合"上一次排列次序",默认为按字典次序升序

bool prev_permutation(begin, end, op)	// op为自定义排列次序

若要实现全排列,首先必须要对初始序列进行排序,使之成为字典次序中的第一个排列方式或最后一个排列方式,否则next_permutation() 函数和prev_permutation() 函数只能给出当前序列的下一个或上一个。
posted @ 2022-12-21 14:21  Szang  阅读(52)  评论(0编辑  收藏  举报