Pagini recente » Cod sursa (job #2778945) | Cod sursa (job #2000961) | Cod sursa (job #594573) | Cod sursa (job #1364010) | Cod sursa (job #162400)
Cod sursa(job #162400)
// http://infoarena.ro/problema/combinari
#include <stdio.h>
char st[18];
int N, K;
inline void init( char k )
{
st[k] = 0;
}
inline char succesor( char k )
{
if( k < N && st[k] < N )
{
st[k]++;
return 1;
}
return 0;
}
inline char valid( char k )
{
static char i;
for( i = 0; i < k; ++i )
{
if( st[k] <= st[i] )
return 0;
}
return 1;
}
inline char solutie( char k )
{
if( k == K-1 )
return 1;
return 0;
}
inline void tiparire( )
{
static char i;
printf( "%d", st[0] );
for( i = 1; i < K; ++i )
printf( " %d", st[i] );
printf("\n");
}
void backtrack( char k )
{
if( solutie( k ) )
tiparire();
else
{
init( k );
while( succesor( k ) )
if( valid( k ) )
backtrack( k + 1 );
}
}
int main()
{
freopen( "combinari.in", "r", stdin );
freopen( "combinari.out", "w", stdout );
scanf( "%d %d", &N, &K );
char k = 0, as = 0, ev = 0;
init( k );
//st[0] = 0;
while( k >= 0 )
{
do
{
as = succesor( k );
if( as )
ev = valid( k );
} while( as && !ev );
if( as )
{
if( solutie( k ) )
//if( k == K-1 )
tiparire();
else
//st[++k] = 0;
init( ++k );
}
else
--k;
}
//backtrack( 0 );
return 0;
}