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 :
Le programme m'écrit bien en partie :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 for(Station st : reseau){ pasVu.add(st); } for(Station st : pasVu){ System.out.println(" -> "+st.getNom()); }
Mais après un peu plus loin dans la fonction j'écris :->€ Barbès - Rochechouart
->€ Gare du Nord
->€ Château d'Eau
et il me répond :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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()); }
Pour moi ça signifie qu'il ne rentre pas dans la condition ifChâteau d'Eau ## encore 87
? Gare du Nord
? Gare de l'Est (Verdun)
-> Gare de l'Est (Verdun)
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 :
répond
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 for(Station st : reseau){ if(pasVu.contains(st)){ System.out.println(st.getNom()+" est dans pasVu"); } }Pour mettre les stations dans le tableau "voisins" je ne crois pas avoir de problèmes de référence :Barbès - Rochechouart est dans pasVu
Gare du Nord est dans pasVu
Château d'Eau est dans pasVu
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 : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 for(Station st2 : st.getPrec()){ voisins.add(st2); } for(Station st2 : st.getSucc()){ voisins.add(st2); }
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.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 tmp = new Station(ligne, ligneRATP); reseau.add(tmp); if(i!=0){ tmpOLD.addSucc(tmp, poidsOLD); tmp.addPrec(tmpOLD, poidsOLD);
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![]()
Partager