Pagini recente » Cod sursa (job #736867) | Cod sursa (job #488348) | Cod sursa (job #2493906) | Cod sursa (job #1444290) | Cod sursa (job #1231231)
#include <stdio.h>
#define MAXN 100
#define FIN "combinari.in"
#define FOUT "combinari.out"
//function prototypes
void read();
void init();
int solution();
void printSolution();
int isValid();
int has_next();
void back();
int stack[ MAXN ], level, n, k;
int main() {
read();
back();
return(0);
};
void read() {
freopen(FIN, "r", stdin);
scanf("%d %d", &n, &k);
fclose( stdin );
};
void back() {
int HS;
freopen(FOUT, "w", stdout);
level = 1;
init();
while( level > 0 ) {
do{}while( ( HS = has_next() ) && !isValid() );
if( HS )
if( solution() )
printSolution();
else level++, init();
else level--;
}
fclose( stdout );
};
void init() {
if(level > 1) stack[ level ] = stack[ level - 1 ];
else stack[ level ] = 0;
};
int solution() {
return level == k;
};
void printSolution() {
int i;
for(i = 1; i <= k; i++) printf("%d ", stack[ i ]);
printf("\n");
};
int isValid() {
int i;
for(i = 1; i <= level - 1; i++) {
if(stack[ i ] == stack[ level ]) return 0;
}
return 1;
};
int has_next() {
if(stack[ level ] < n - k + level) {
stack[ level ]++;
return 1;
}
return 0;
};