#include<iostream>
#include<vector>
using namespace std;
//组合
vector<vector<int>>ans;
vector<int>record;
int c;
void quick_sort(int left, int right, vector<int>& a);
int sort(vector<int>& a, int left, int right);
void dfs(vector<int>& a, int b);
int main() {
int num_element;
cin >> num_element;
vector<int>a(num_element, 0);
for (int i = 0; i <num_element ; i++) {
cin >> a[i];
}
quick_sort( 0, a.size()-1,a);
cout << "输入要取的个数";
for (int i = 0; i < num_element; i++) {
cout << a[i];
}
cin >> c;
dfs(a, 0);
for (int i = 0; i < ans.size(); i++) {
for(int j=0;j<ans[i].size();j++)
cout << ans[i][j] << " ";
cout << endl;
}
return 0;
}
void dfs(vector<int>& a,int begin) {//begin:从哪里下标开始取
if (record.size() >= c) {
ans.push_back(record);
return;
}
for (int i = begin; i < a.size(); i++) {
//i是3,进去dfs(a,begin+1)是dfs(a,1),所以会出现4 3(后面的数比较小的情况
record.push_back(a[i]);
dfs(a, i + 1);//一开始写begin+1改了老久代码,写begin+1的话比如现在的
record.pop_back();
}
}
int sort(vector<int>& a,int left,int right) {
int b = a[left];
while (left < right) {
while (a[right] >= b && left < right) right--;
a[left] = a[right];
while (a[left] <= b && left < right) left++;
a[right] = a[left];
}
a[left] = b;//第一次这个忘记了
return left;
}
void quick_sort(int left,int right,vector<int>&a) {
if (left >= right) return;
int mid = sort(a,left,right);
quick_sort(left,mid-1,a);
quick_sort(mid+1,right, a);
}
回溯经典之,组合 排列
最新推荐文章于 2024-07-09 22:37:42 发布