文章目录
目录
前言
这个栏目是对我算法学习过程的同步记录,我也希望能够通过这个专栏加深自己对编程的理解以及帮助到更多像我一样想从零学习算法并参加竞赛的同学。在这个专栏的文章中我会结合在编程过程中遇到的各种问题并提出相应的解决方案。当然,如果屏幕前的你有更好的想法或者发现的错误也欢迎交流和指出!不喜勿喷!不喜勿喷!不喜勿喷!这章的内容较为简单,那么事不宜迟,我们马上开始吧!
一、next_permutation()函数
1.原理介绍
next_permutation()函数用于生成当前序列的下一个排列,它按照字典序对序列进行重新排列,如果存在下一个排列,则将当前序列更改为下一个排列,并返回true;如果当前序列已经是最后一个排列,则将序列更改为第一个排列,并返回false。
2.代码示例
#include <bits/stdc++.h>
using namespace std;
int main()
{
ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
vector<int> nums = { 1, 2, 3 };
cout << "Initail status:" << endl;
for (int num : nums)cout << num << " ";
cout << endl;
while (next_permutation(nums.begin(), nums.end())) {
cout << "Next Status:" << endl;
for (int num : nums)cout << num << " ";
cout << endl;
}
return 0;
}
输出结果如下:
Initail status:
1 2 3
Next Status:
1 3 2
Next Status:
2 1 3
Next Status:
2 3 1
Next Status:
3 1 2
Next Status:
3 2 1
我们不妨在开始的序列中增加几个数并将顺序打乱,再看一下结果如何。
此时有vector<int> nums = {4, 3, 7, 8, 2, 9}
结果如下:
Initail status:
4 3 7 8
Next Status:
4 3 8 7
Next Status:
4 7 3 8
Next Status:
4 7 8 3
Next Status:
4 8 3 7
Next Status:
4 8 7 3
Next Status:
7 3 4 8
Next Status:
7 3 8 4
Next Status:
7 4 3 8
Next Status:
7 4 8 3
Next Status:
7 8 3 4
Next Status:
7 8 4 3
Next Status:
8 3 4 7
Next Status:
8 3 7 4
Next Status:
8 4 3 7
Next Status:
8 4 7 3
Next Status:
8 7 3 4
Next Status:
8 7 4 3
二、prev_permutation()函数
1.原理介绍
prev_permutation()函数用于生成当前序列的上一个排列,它按照字典序对序列进行重新排列,如果存在上一个排列,则将当前序列更改为上一个排列,并返回true;如果当前序列已经是第一个排列,则将序列更改为最后一个排列,并返回false。
2.代码示例
#include <bits/stdc++.h>
using namespace std;
int main()
{
ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
vector<int> nums = { 3, 2, 1 };
cout << "Initail status:" << endl;
for (int num : nums)cout << num << " ";
cout << endl;
while (prev_permutation(nums.begin(), nums.end())) {
cout << "Prev Status:" << endl;
for (int num : nums)cout << num << " ";
cout << endl;
}
return 0;
}
结果如下:
Initail status:
3 2 1
prev Status:
3 1 2
prev Status:
2 3 1
prev Status:
2 1 3
prev Status:
1 3 2
prev Status:
1 2 3
总结
我也从没想过有关全排列的库函数还有这么多的花样。总而言之,如果你觉得这篇文章还不错,劳烦多多支持一下!码字不易,感谢你的观看!