#include <bits/stdc++.h>
using namespace std;
//递归函数
void function_Permutation(vector<int>& arr, vector<int>&arrs, size_t start, size_t r, vector<vector<int>>& result) {
//终止条件 动态数组arrs取了r个数时
if ( arrs.size() == r ) {
result.push_back(arrs);//把动态数组放在结果数组里面
return;
}
for ( size_t i = start; i < arr.size(); i++ ) {
arrs.push_back(arr[i]); //按顺序将每一个数字固定在arrs数组中
function_Permutation(arr , arrs , i + 1 , r , result); // 递归深入处理选数字找位置(i+1)==》 start
arrs.pop_back(); // 递归最深处后(代表最后一个数字有了并且存下了,那就删掉最后一个数字进入循环。
//问题出在 arrs.pop_back(arr[i]) 这一行代码。std::vector::pop_back 是一个成员函数,
//它的作用是移除向量的最后一个元素,但它不接受任何参数。然而,你在调用时错误地传入了一个参数 arr[i]。
}
}
int main()
{
int n,r;
cin >> n >> r;
//接收数组
vector<int> arr(n);
for ( int i = 0; i < n; i++ ) {
cin >> arr[i];
}
//升序
sort(arr.begin() , arr.end());
//创建储存数组result 动态数组arrs
vector<vector<int>> result;
vector<int> arrs;
//调用递归函数
function_Permutation(arr, arrs , 0 , r , result);
//输出结果函数
for ( const auto& nums : result ) {
for ( int num : nums ) {
cout << num << " ";
}
cout << endl;
}
return 0;
}
0 回复
0 转发
0 喜欢
6 阅读



