欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 教育 > 幼教 > c++ 全排列

c++ 全排列

2025/5/22 10:41:22 来源:https://blog.csdn.net/qq_43689451/article/details/140901592  浏览:    关键词:c++ 全排列

在C++中,全排列(permutation)可以使用递归算法或标准库函数来实现。以下是使用递归和STL库std::next_permutation来生成一个集合的全排列的两种方法。

方法一:递归算法

递归方法通过交换元素来生成所有可能的排列组合。

#include <iostream>
#include <vector>
#include <algorithm>void permute(std::vector<int>& nums, int l, int r, std::vector<std::vector<int>>& result) {if (l == r) {result.push_back(nums);} else {for (int i = l; i <= r; ++i) {std::swap(nums[l], nums[i]);permute(nums, l + 1, r, result);std::swap(nums[l], nums[i]); // backtrack}}
}int main() {std::vector<int> nums = {1, 2, 3};std::vector<std::vector<int>> result;permute(nums, 0, nums.size() - 1, result);for (const auto& perm : result) {for (int num : perm) {std::cout << num << " ";}std::cout << std::endl;}return 0;
}

方法二:使用STL库std::next_permutation

std::next_permutation是C++标准库中提供的函数,用于生成字典序中的下一个排列。可以通过不断调用该函数来生成所有的排列组合。

#include <iostream>
#include <vector>
#include <algorithm>int main() {std::vector<int> nums = {1, 2, 3};std::sort(nums.begin(), nums.end()); // 确保初始状态是最小排列do {for (int num : nums) {std::cout << num << " ";}std::cout << std::endl;} while (std::next_permutation(nums.begin(), nums.end()));return 0;
}

方法三:使用C++11或更高版本的std::vectorstd::algorithm

如果您使用的是C++11或更高版本,可以结合std::vectorstd::algorithm来简化代码。

#include <iostream>
#include <vector>
#include <algorithm>int main() {std::vector<int> nums = {1, 2, 3};do {for (const int& num : nums) {std::cout << num << " ";}std::cout << std::endl;} while (std::next_permutation(nums.begin(), nums.end()));return 0;
}

这三种方法都能有效地生成并打印一个集合的所有排列。第一种方法通过递归和回溯的方式,适合理解递归思想和回溯算法的实现;第二种和第三种方法利用标准库函数std::next_permutation,简化了代码实现,适合实际项目中的快速应用。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词