bom, a def. do seu problema contém um erro, você
está pedindo para retornar uma combinação de n índices, ou seja só existe
uma!
mas tudo bem, acho que você tem a liberdade de usar
quantos elementos quiser do vetor p.
pense que você tem um vetor r com n
elementos.
void
mochila(int P, int*
p, int* r, int
i, int n)
{
if ( i < n )
{
/* coloca o i'ésimo item na
mochila */ r[i]
= 1;
/* o peso adicional que deve ser colocado é P -
p[i] */
mochila( P - p[i], p, r, i + 1, n );
/* não coloca o i'ésimo item na
mochila */
r[i]
= 0;
mochila( P, p, r, i + 1, n );
}
else if ( P ==
0 )
{
/* Imprime os itens
inseridos */
for ( int j = 0; j < n;
j++ )
{
printf( "Combinação encontrada: \n" );
printf( "p%d ", j );
if (
r[j] )
}
}
return;
}
chame a função dessa forma:
mochila( P, p, r, 0, n );
pode haver algum erro pq eu fiz sem testar, mas
deve rodar.
|