ciao a tutti, mi han dato come esercizio un programma in cui gestisco una pasticceria e da un file estrapolo gli ingredienti che ho nel mio laboratorio e nell'altro le varie ricette delle torte con gli ingredienti necessari (è strutturato così il secondo file "nomericetta prezzo n.ingredienti" e poi gli n righe(che coincide a n.igredienti) che elenca gli ingredienti necessari per la preparazione. Il programma dice di trovare la combinazione di torte(es 3 torte al cioccolato 1 e 1 alla crema) che mi offre maggior guadagno dagli ingredienti che ho a disposizione. Ora io sono riuscito solamente a trovare tutte le soluzioni possibili che posso produrre dagli ingredienti che ho a disposizione,ma non riesco a printare la solo la soluzione migliore.Vi posto il codice
codice:
#include <stdio.h>#include <stdlib.h>
#include <string.h>
#define MAX 100


typedef struct
{
    char ingredient[21];
    int disp;
} warehouse;
typedef struct
{
    int ind;
    int gr;
} cakeingredients;
typedef struct
{
    char cake[21];
    int prize;
    int numberingredients;
cakeingredients *p;
} recipe;
void buddy(warehouse *bakery,recipe *recipes,int pos,int numberrecipe,int k[numberrecipe],int numberbakeryitem,int temp1[numberrecipe],int moneymax);
int main(int argc,char *argv[])
{
    warehouse *bakery;
recipe *recipes;
    int i=0,j=0,z;
    int numberbakeryitem;
    int numberrecipe;
    FILE *f,*f2;
    f=fopen(argv[1],"r");
    fscanf(f,"%d",&numberbakeryitem);
    bakery=malloc(numberbakeryitem*(sizeof(recipe)));
    while(!feof(f))
    {
        fscanf(f,"%s %d",bakery[i].ingredient,&bakery[i].disp);
        i++;
    }
    i=0;
    fclose(f);
    f2=fopen(argv[2],"r");
    fscanf(f2,"%d",&numberrecipe);
    recipes=malloc(numberrecipe*sizeof(recipe));
    j=0;
char temp[31];
    while(!feof(f2))
    {
        fscanf(f2,"%s %d %d",recipes[j].cake,&recipes[j].prize,&recipes[j].numberingredients);
      recipes[j].p=malloc(recipes[j].numberingredients*sizeof(cakeingredients));
        for(i=0; i<recipes[j].numberingredients; i++)
        {
            fscanf(f2,"%s %d",temp,&recipes[j].p[i].gr);


for(z=0;z<numberbakeryitem;z++)
{
    if(strcmp(temp,bakery[z].ingredient)==0)
    {
        recipes[j].p[i].ind=z;
    }
}
        }
        j++;
    }


int k[numberrecipe];
 for(i=0;i<numberrecipe;i++)
 {
     k[i]=0;
 }
 int temp1[numberrecipe];
 for(i=0;i<numberrecipe;i++)
 {
     temp1[i]=0;
 }int moneymax=0;
 buddy(bakery,recipes,0, numberrecipe, k, numberbakeryitem,temp1,moneymax);
    return 0;
}
void buddy(warehouse *bakery,recipe *recipes,int pos,int numberrecipe,int k[numberrecipe],int numberbakeryitem,int temp1[numberrecipe],int moneymax)
{
    int i,j;
int money=0;
    int INDEX;
    for(i=pos;i<numberrecipe;i++)
   {


        int cando = 1;
        for(j=0;j<recipes[i].numberingredients;j++)
        {
           INDEX=recipes[i].p[j].ind;
           if( bakery[INDEX].disp - recipes[i].p[j].gr<0)
           {


                cando=0;
                break;
           }
        }
        if (cando)
        {




        for(j=0;j<recipes[i].numberingredients;j++)
        {
           INDEX=recipes[i].p[j].ind;
            bakery[INDEX].disp-=recipes[i].p[j].gr;


        } k[i]++;
        buddy(bakery,recipes,i, numberrecipe, k, numberbakeryitem,temp1,moneymax);
        k[i]--;


        for(j=0;j<recipes[i].numberingredients;j++)
        {
           INDEX=recipes[i].p[j].ind;
            bakery[INDEX].disp+=recipes[i].p[j].gr;


        }






   }




}
for(j=0;j<numberrecipe;j++)
{
    printf(" %d %s ",k[j],recipes[j].cake);
}printf("\n");


}