Cod sursa(job #2230648)

Utilizator TrixerAdrian Dinu Trixer Data 10 august 2018 22:16:49
Problema Combinari Scor 100
Compilator c Status done
Runda Arhiva educationala Marime 0.8 kb
#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;
}