[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[obm-l] Re: [obm-l] recursão



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" );
            if ( r[j] )
                printf( "p%d ", 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.
----- Original Message -----
Sent: Wednesday, May 07, 2003 9:40 AM
Subject: [obm-l] recursão

alguém pode me ajudar com o seguinte problema? preciso de uma idéia de como fazer!

Entradas:
> - um inteiro n;
> - um vetor de ordem n de inteiros de pesos (p[n]);
> - um inteiro P;
> Tenho uma mochila que carrega até P quilos, e voce tem n itens de
> pesos p1, p2, p3,...,pn. Tenho que fazer um programa para achar todas as  combinacoes de itens i1,i2,...,in tal que a soma de seus pesos seja igual a P, caso nao encontre nenhuma combinacao, tenho que mostrar que não encontrei nenhuma combinação

> o problema deve ser feito se utilizando de uma funcao recursiva 

Se alguém puder me ajudar agradeço muito,

Abraços a todos!



Yahoo! Mail
O melhor e-mail gratuito da internet: 6MB de espaço, antivírus, acesso POP3, filtro contra spam.