返回题解分享
讨论 / 题解分享/ 帖子详情

部分元素排列 - 题解

#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 阅读
回复 (0)
默认 最新
暂无回复,快来抢沙发!