Pagini recente » Cod sursa (job #1477686) | Cod sursa (job #2858829) | Cod sursa (job #1382436) | Cod sursa (job #137294) | Cod sursa (job #2499391)
#include <cstdio>
#include <vector>
using namespace std;
void consume(vector<bool>& taken, int largestPossibleValue) {
for (int i = 1; i <= largestPossibleValue; i++) {
if (taken[i]) {
printf("%d ", i);
}
}
printf("\n");
}
void back(int remainingElems, int N, vector<bool>& taken, vector<int>& currentSol) {
if (remainingElems == 0) {
consume(taken, N);
return;
}
int start = currentSol.empty() ? 0 : currentSol.back();
for (int nextElem = start + 1; nextElem <= N; nextElem++) {
if (!taken[nextElem]) {
taken[nextElem] = true;
currentSol.push_back(nextElem);
back(remainingElems - 1, N, taken, currentSol);
taken[nextElem] = false;
currentSol.pop_back();
}
}
}
int main() {
freopen("combinari.in", "r", stdin);
freopen("combinari.out", "w", stdout);
int N, K;
scanf("%d%d", &N, &K);
vector<bool> taken(N + 1, false);
vector<int> currentSol;
currentSol.reserve(N);
back(K, N, taken, currentSol);
return 0;
}