ciao a tutti ho un problema con questo es:Una azienda di trasporti possiede degli autocarri con portata utile pari a 100 quintali.Si scriva un programma C che:
• legga da un file (il cui nome `e stato preventivamente acquisito da tastiera) le informazioni relative
ad una generica spedizione, ossia:
– il numero dei colli (prima riga del file);
– per ogni collo, il peso (in quintali); l’informazione relativa a ciascun collo occupa una riga
del file;
• trovi una sistemazione dei colli sugli autocarri, in modo che il numero di autocarri necessario
per la spedizione sia minimo, e per nessun autocarro non sia superata la portata massima; `e
inoltre richiesto che lo sbilanciamento di carico tra i vari autocarri sia minimizzato.
• visualizzi:
– il numero k di autocarri necessario;
– per ogni collo, il numero d’ordine dell’autocarro (tra 0 e k − 1) su cui va caricato;
Esempio. Si supponga che il file in ingresso abbia il seguente contenuto:
10
32
76
20
81
15
25
5
48
59
5
Allora, l’uscita del programma deve essere del tipo:
Carico distribuito su 4 autocarri.
Collocazione dei colli:
+ Autocarro 0, peso 91
- Collo n. 0, peso q.li 32
- Collo n. 8, peso q.li 59
+ Autocarro 1, peso 91
- Collo n. 1, peso q.li 76
- Collo n. 4, peso q.li 15
+ Autocarro 2, peso 93
- Collo n. 2, peso q.li 20
- Collo n. 5, peso q.li 25
- Collo n. 7, peso q.li 48
+ Autocarro 3, peso 91
- Collo n. 3, peso q.li 81
- Collo n. 6, peso q.li 5
- Collo n. 9, peso q.li 5
Sbilanciamento = 2
ecco il mio codice
codice:



#include <stdio.h>
#include <stdlib.h>
void ric(int **M,int number,int *weightpack,int *QU,int pos,int s2,int v[100]);
int v[100];
int main(int argc,char *argv[])
{
    FILE *f;
    int i=0,number;
    int *weightpack;
    f=fopen(argv[1],"r");
    int s=0;


    int s2;
    int **M;
    int *QU;


    fscanf(f,"%d",&number);
    weightpack=malloc(number*sizeof(int));
    while(!feof(f))
    {
        fscanf(f,"%d",&weightpack[i]);
        s=weightpack[i]+s;
        i++;
    }
    if((s%100)!=0)
    {
        s2=s/100+1;
    }
    else s2=s/100;


    M=(int**)calloc(s2,sizeof(int));
    for(i=0; i<s2; i++)
        M[i]=(int*)calloc(number,sizeof(int));
    QU=malloc(number*sizeof(int));
    for(i=0; i<number; i++)
    {
        QU[i]=100;
    }
    for(i=0; i<s2; i++)
    {
        v[i]=0;
    }


    ric(M,number,weightpack,QU,0, s2,v);


    return 0;
}
void ric(int **M,int number,int *weightpack,int *QU,int pos,int s2,int v[100])
{
    int i,j;
    int M1[s2],M2[number];
    if(pos==s2)
    {
        for(i=0; i<s2; i++)
        {
            printf("camion n%d\n",i);
            for(j=0; j<number; j++)
            {
                if(M[i][j]==1)
                    printf(" lotto numero %d\n",j);
            }


        }


        for(i=0; i<number; i++)
        {
            QU[i]=M1[i];
        }
        for(i=0; i<s2; i++)
        {
            weightpack[i]=M2[i];
        }
        for(i=0; i<s2; i++)
        {
            v[i]=0;
        }
for(i=0; i<s2; i++)
    {
        for(j=0; j<number; j++)
    {
        M[i][j]=0;
    }
    }


return;
    }
    if(pos==0)
    {
        for(i=0; i<number; i++)
        {
            M1[i]=QU[i];
        }
        for(i=0; i<s2; i++)
        {
            M2[i]=weightpack[i];
        }


    }




    {
        for(i=0; i<number; i++)
        {
            if(QU[pos]-weightpack[i]>0)
            {
                if(v[i]!=1)
                {
                    QU[pos]-=weightpack[i];
                    v[i]=1;
                    M[pos][i]=1;


ric(M,number,weightpack,QU, pos+1, s2,v);
                }




            }








        }


    }














}
il punto è che ottengo una soluzione greedy del problema,ma non ottengo tutte le possibili soluzioni!!come faccio?