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

部分元素排列 - 题解

另类思路,看大家写的挺多的



#include<iostream>
#include<set>
#include<vector>
using namespace std;
set<int> s;
vector<int> vec(11);//存排序好的输入的所有的数
vector<int> vec1(11);//存选择的数

int ss;
int n, r;
int b[11];//标记选择过的对应vec的位置的数
void dfs(int k) {
    if(k == r + 1) {
        for(int i = 0; i < k - 2; i++) {
            cout << vec1[i] << " ";
        }
        cout << vec1[k - 2] << endl;
    }
    
    for(int i = k - 1; i < n; i++) {
        if(b[i] == 0 && (k == 1 || vec1[k - 2] < vec[i])) {
            b[i] = 1;
            vec1[k - 1] = vec[i];
            dfs(k + 1);
            b[i] = 0;
        }
    }
}
int main() {
    cin >> n >> r;
//这里用到set,进行从小到大排序
    for(int i = 0; i < n; i++) {
        cin >> ss;
        s.insert(ss);
    }
//用assign将set中的数存到vec中去,主要是vec好取下标。
    vec.assign(s.begin(), s.end());
    dfs(1);
}
0 回复 0 转发 0 喜欢 2 阅读
回复 (0)
默认 最新
暂无回复,快来抢沙发!