stl中的next_permutation实现全排列

本文介绍了在C++中如何使用深度优先搜索(DFS)算法实现全排列,并对比了DFS代码实例与STL库函数`next_permutation`的用法,两者均能生成123和213的全排列序列。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  对于dfs算法我们可以进行许多操作,最重要的就是了解回溯哪一个步骤是啥。好,现在我就快速的进入今天所要书写的内容,假如给你几个数要我们实现全排列。我们第一反应就是使用dfs回溯算法

​
#include <bits/stdc++.h>
#define int long long
using namespace std;
void dfs(vector<int>& arr, int cnt, vector<vector<int> >& result) {
    if (cnt == arr.size()) {
        result.push_back(arr);
        return;
    }
    for (int i = cnt; i < arr.size(); i++) {
        swap(arr[cnt], arr[i]);
        dfs(arr, cnt + 1, result);
        swap(arr[cnt], arr[i]);
    }
}
signed main() {
    int arr[] = {1, 2, 3};
    vector<int> vec(arr, arr + sizeof(arr) / sizeof(arr[0]));
    vector<vector<int> > result;
    dfs(vec, 0, result);
    for (size_t i = 0; i < result.size(); i++) {
        for (size_t j = 0; j < result[i].size(); j++) {
            cout << result[i][j] << " ";
        }
        cout << endl;
    }
    return 0;
}

​

这是常见的dfs进行全排列的一个小小的例子,其中那个arr数组里面的数可以进行改变或者别样的操作相信读者应该能看得懂代码。

  下面进入本章的主角next_permutation,这是一个stl库中一个实现全排列的方法,这个的语法可以就是next_permutation(开始,结束);这样就可以搭配各种语句来实现全排列了!

#include <bits/stdc++.h>
#define int long long
using namespace std;

signed main() {
    int arr[] = {1, 2, 3};
    vector<int> vec(arr, arr + sizeof(arr) / sizeof(arr[0]));
    sort(vec.begin(), vec.end());
    do {
        for (size_t i = 0; i < vec.size(); i++) {
            cout << vec[i] << " ";
        }
        cout << endl;
    } while (next_permutation(vec.begin(), vec.end()));
    return 0;
}

这两个代码得出的结果都是

1 2 3
1 3 2
2 1 3
2 3 1
3 1 2
3 2 1

OK这章介绍next_permutation就到此结束了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值