Pagini recente » Cod sursa (job #3246148) | Cod sursa (job #1578981) | Cod sursa (job #604820) | Cod sursa (job #2533079) | Cod sursa (job #2230648)
#include <stdio.h>
#define NMAX 19
int n, k;
int used;
int combination[NMAX];
int get_bit(int x, int b)
{
return x & (1 << b);
}
void set_bit(int *x, int b)
{
*x = *x ^ (1 << b);
}
void clear_bit(int *x, int b)
{
*x = *x & ~(1 << b);
}
void print_array(int *arr, int size)
{
for (int i = 1; i <= size; i++)
printf("%d ", arr[i]);
printf("\n");
}
void backtrack(int level, int idx)
{
if (level > k) {
print_array(combination, k);
return;
}
for (int i = idx; i <= n; i++) {
if (!get_bit(used, i)) {
set_bit(&used, i);
combination[level] = i;
backtrack(level + 1, i + 1);
clear_bit(&used, i);
}
}
}
int main()
{
// read input
freopen("combinari.in", "r", stdin);
scanf("%d%d", &n, &k);
// write combinations
freopen("combinari.out", "w", stdout);
backtrack(1, 1);
return 0;
}