ArrayList -> méthode contains() (pour algo de Dijsktra)
Bonjour,
J'ai un problème avec Dijkstra (calculer le plus court chemin sur un réseau de transport). Ça fait 2 jours que j'essaie de l'implanter mais ça ne marche jamais.
Ici j'écris :
Code:
1 2 3 4 5 6
| for(Station st : reseau){
pasVu.add(st);
}
for(Station st : pasVu){
System.out.println(" -> "+st.getNom());
} |
Le programme m'écrit bien en partie :
Citation:
->€ Barbès - Rochechouart
->€ Gare du Nord
->€ Château d'Eau
Mais après un peu plus loin dans la fonction j'écris :
Code:
1 2 3 4 5 6 7 8
| for(Station st2 : voisins){
System.out.println(" ? "+st2.getNom());
if(pasVu.contains(st2)){
//st2.distParcouru=st.getMinPoids(st2);
//pasVu.remove(st2);
//vu.add(st2);
System.out.println(" -> "+st2.getNom());
} |
et il me répond :
Citation:
Château d'Eau ## encore 87
? Gare du Nord
? Gare de l'Est (Verdun)
-> Gare de l'Est (Verdun)
Pour moi ça signifie qu'il ne rentre pas dans la condition if
st2 décrit toutes les stations liées aux stations déjà vues du réseau. Je suis sur que le réseau comprend bien la station :
Code:
1 2 3 4 5
| for(Station st : reseau){
if(pasVu.contains(st)){
System.out.println(st.getNom()+" est dans pasVu");
}
} |
répond
Citation:
Barbès - Rochechouart est dans pasVu
Gare du Nord est dans pasVu
Château d'Eau est dans pasVu
Pour mettre les stations dans le tableau "voisins" je ne crois pas avoir de problèmes de référence :
Code:
1 2 3 4 5 6
| for(Station st2 : st.getPrec()){
voisins.add(st2);
}
for(Station st2 : st.getSucc()){
voisins.add(st2);
} |
Et lorsque je désigne les précédents/successeurs de chaque ligne ça me semble bien être la même référence que lorsque j'ajoute dans le tableau réseau :
Code:
1 2 3 4 5
| tmp = new Station(ligne, ligneRATP);
reseau.add(tmp);
if(i!=0){
tmpOLD.addSucc(tmp, poidsOLD);
tmp.addPrec(tmpOLD, poidsOLD); |
Je ne comprends pas pourquoi la première fois il me dit que Gare du Nord est dans la liste pasVu et pas la deuxième fois.
Quelqu'un connait un bug de ce genre ? Avez vous besoin de plus d'infos ? Sauriez-vous m'aider ?
Je comprends toujours pas mais ce que vous m'avez dit de faire fonctionne. merci :)