Colección de citas famosas - Slogan de motivación - Algoritmo recursivo del problema de la mochila en lenguaje C

Algoritmo recursivo del problema de la mochila en lenguaje C

El programa del interrogador utiliza un algoritmo recursivo, pero hay un pequeño error lógico cuando se determina n==0, si todavía hay capacidad, se debe devolver el peso del primer artículo en lugar de 0. Puede cambiar la capacidad C o los parámetros del elemento para verificar la corrección lógica del algoritmo.

Con respecto a la salida de los elementos seleccionados, agregué una matriz para marcar los elementos seleccionados. Debido a que solo la marca más externa es válida después de realizar toda la recursividad, finalmente se usa un bucle for para completar las marcas en cada nivel. El siguiente es el programa modificado: int?a[5]={0};

int?MaxW(int?n,?int?C,?int?*Volunme,?int?*Weight)

{

int?W=0,W1=0,W2=0;

si?(n?==?0)

{

if(C?>=?Volunme[0])

{

a[0]=1;

retorno?W=1;

}

otro

retorno?0;

}

else?if(C?>=?Volunme[n])//El espacio restante en la mochila puede contener artículos n

{

W1?=?MaxW(n-1 ,?C -Volunme[n],Volunme,Weight)?+?Weight[n];?//El peso que puedes obtener poniendo n

W2?=?MaxW(n-1,C ,Volumen, Peso);?//El peso que se puede obtener sin n

W=(W1>W2?W1:W2);

a[n]=(W1 >W2? 1:0);

}

else//El espacio de la mochila no puede contener n, regrese para juzgar la situación de colocar n-1

{

retorno?MaxW(n-1,C,Volunme,Peso);

}

retorno?W;

}

int?main(void)

{

int?n=5;int?C=7;

int?Volunme []?=?{ 1,2,3,4,5};

int?Peso[]?=?{1,2,5,7,8};

printf("Peso máximo para %d\n",MaxW(n-1,C,Volunme,Peso));

for(int?i=n-2;i>=0;i --)

{

a[i]=0;

if(a[i+1]==1)

{

C-=Volunme[i+1];

Peso[i+1]=0;

}

MaxW(i,C, Volunme,Weight);

}

printf("El número de artículo seleccionado es: ");

for(int?i =0;i<5 ;i++)

{

if(a[i]==1)

printf("#%d",i +1);

}

printf("\n");

return?0;

}