Citation Envoyé par celine2 Voir le message
Bonjour,
Je sollicite vos aides pour avoir la bon résultat .
Je voudrais écrire un bout de programme qui me permet de chercher le noeuds le plus proche (en terme de distance par rapport à un noeud de départ)et de faire le test sur ce noeud avant de prendre(la variable chargeProduit1, chargeProduit2 et capaciteRestante>=0).Si le noeud satisfait les conditions on le prend sinon on cherche un noeud plus loin qui satisfait ces conditions etc.
Ci-dessous ma fonction. Toutefois, ça n'exécute pas correctement . Merci par avance.
Je refais mon programme. ça toujours ne fonctionne pas correctement.
J'aimerais savoir comment faire pour que le programme faire ce test
Code:
 if(chargeProduit1>=0&&chargeProduit2>=0&&capaciteRestante<=0)
//else chercher un noeud plus loin
avant de choisir le noeud et de stocker dans la variable pCircuit->tableau?Lors de l'exécution, il m affiche la liste de noeuds par ordre le plus proche. Il ne tient pas compte de la condition ci-dessus.
Aidez-moi SVP
Code:
int chercherNoeudPlusProche(int nbreNoeudsTrouve, double **distanceEntreVertices,  GestionNoeuds *pGestionNoeuds, Circuit *pCircuit, int noeudDebut)
{
    int i,j;

    int trouve;
    int noeudProche = 0;
    double distanceMin =1000;
 
    for(i=0;i<nbreNoeuds;i++)
    {

           trouve =0;//trouve est faux


               j=0;
               while(trouve==0&&j<taille)
               {

                     if(i==pCircuit->tableau[j])
                     {
                          trouve = 1;


                    }
                    else
                    {

                         j++;
                    }

               }
            if(trouve==0 && distanceMin>distanceEntreVertices[noeudDebut][i])
            {
                    distanceMin = distanceEntreVertices[noeudDebut][i];
                    noeudProche = i;
                    printf("noeudProche: %d\n",noeudProche);

               }

     }


     return noeudProche;
}
Circuit* creationCircuit(int noeudDepart, GestionNoeuds *pGestionNoeuds )
{
     int i;
     int j;
     int b;
     Circuit *pCircuit;
     pCircuit= allocationCircuit();
      int chargeProduit1 =0;
      int chargeProduit2 =0;
     int capaciteRestante = capaciteMax;
    /* Ici, on va constituer une solution. */

    /* On initialise */
     for (i=0 ; i<nbreNoeuds ; i++)
        pCircuit->tableau[i] =-1;
     int trouve;
     int temp;

     int dateArrivee=0;
     int deuxiemeNoeud;

     double **distanceEntreNoeuds = calculDistance(pGestionNoeuds);
#if TRACE
     pCircuit->tableau[0] = 0;

     pCircuit->tableau[10] = 0;
#endif
#if TRACE
     deuxiemeNoeud = chercherIndiceNoeudPlusGrosseDemande(pGestionNoeuds);

#endif
#if TRACE
     pCircuit->tableau[1] = deuxiemeNoeud;
     chargeProduit1+=pGestionNoeuds->tableau[1].demandProduit1;
     chargeProduit2+=pGestionNoeuds->tableau[1].demandProduit2;
     capaciteRestante-= pGestionNoeuds->tableau[1].demandProduit1+pGestionNoeuds->tableau[1].demandProduit2;

     dateArrivee += distanceEntreNoeuds[0][1 ]+ pGestionNoeuds->tableau[1].serviceTime;

#endif
#if TRACE

   for(j=2;j<taille;j++)
  {
    b=0;

     temp = chercherNoeudPlusProche(taille, distanceEntreNoeuds, pGestionNoeuds, pCircuit,pCircuit->tableau[j-1]);
     chargeProduit1 += pGestionNoeuds->tableau[temp].demandProduit1;
     printf("\nchargeP1 %d\n",chargeProduit1);
     chargeProduit2+= pGestionNoeuds->tableau[temp].demandProduit2;
     printf("\nchargeP2 %d\n",chargeProduit2);
     capaciteRestante-=pGestionNoeuds->tableau[temp].demandProduit1 + pGestionNoeuds->tableau[temp].demandProduit2;
     printf("\ncapaciteRes %d\n",capaciteRestante);
     if(chargeProduit1<=0&&chargeProduit2<=0&&capaciteRestante<=0)
     {
           b++;
           temp = chercherNoeudPlusProche(taille, distanceEntreNoeuds, pGestionNoeuds, pCircuit,pCircuit->tableau[j-1]);
           pCircuit->tableau[j]=temp;

     }
     else{
     pCircuit->tableau[j]=temp;}
  }


     #endif

     return pCircuit;

}