ADSLfx | merci pour la reponse, ça ressemble bien a ce que je pensait, j'utilise le resultat de dijkstra, pour parcourir le graphe a l'envers en verifiant a chaque fois les sommets voisins. par contre apres pour le 1) je ne comprend pas trop, et j'ai l'impression qu'on aura qu'un nombre fixé de chemins, mais il peux y en avoir plein, surtout avec la marge supplémentaire. voici ou j'en suis :
Citation :
public void autresChemins(Vector sommets,int matriceArcs[][], int T[][],int d,
int p,int m,Vector v,int prec) {
Vector chemin=new Vector();
for (int i=0; i<v.size(); i++) // on recopie le chemin deja parcouru
chemin.add(v.elementAt(i));
while(p!=d) {
chemin.insertElementAt(sommets.elementAt(p),0);
// cas du cul de sac : si on est revenu en arriere, on arrete
// le parcours et efface le chemin parcouru
if (chemin.size()>2 && chemin.elementAt(0)==chemin.elementAt(2)) {
chemin.removeAllElements();
break;
}
for (int i=0; i<sommets.size(); i++) // un chemin secondaire ne doit pas revenir sur le sommet precedent, ni // suivre le plus court chemin, et avoir un poids pas trop elevé if (matriceArcs[i][p]!=-1 && i!=T[1][p] && i!=prec && (m>(T[0][i]+matriceArcs[i][p]-T[0][p])))
{
m=m-T[0][i]-matriceArcs[i][p]+T[0][p];
autresChemins(sommets,matriceArcs,T,d,i,m,chemin,p); }
prec=p; p=T[1][p];
}
chemin.insertElementAt(sommets.elementAt(p),0);
if (chemin.size()>1)
for (int i=0;i<chemin.size();i++)
tousLesChemins.add(chemin.elementAt(i));
}
|
lancé par l'insturction Citation :
autresChemins(sommets,matriceArcs,T,pDepart,pArrivee,m*5*T[0][pArrivee]/100,bidon,
pArrivee);
|
matriceArcs donne les distances entre les arcs (-1 si non reliés); pDepart est la position de depart, pareil pour l'arrivée; m est la marge; chemin contient un chemin (il y aura donc autant de vecteurs que de resultats; tousLesChemins cntient tous les chemins.
la le probleme est le suivant : il oublie certaisn chemins, visiblement ceux pour elsquels on doit parcourir le tableau donné par dijkstra en sens inverse. (on parcous un chemin dans un sens alors que si on part de l'un de ses points, le plus court chemin passe en sens inverse). a part ça ça marche. |