Je refais mon programme. ça toujours ne fonctionne pas correctement.
J'aimerais savoir comment faire pour que le programme faire ce testavant 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-dessusCode:if(chargeProduit1>=0&&chargeProduit2>=0&&capaciteRestante<=0) //else chercher un noeud plus loin.
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; }
-----