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");
}