另类思路,看大家写的挺多的
#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 阅读



