Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1169 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  Dijkstra et Boost

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Dijkstra et Boost

n°1761776
fhr
Posté le 18-07-2008 à 20:53:04  profilanswer
 

Bonjour à tous,
 
j'ai besoin d'appliquer l'algo de Dijkstra sur un graphe défini avec Boost. Le graphe est défini via des "bundled properties" et j'appelle Dijkstra comme suggeré dans la doc officielle sur les bundled properties, ie un truc du genre :
 

Code :
  1. struct monTypeVertex
  2. {
  3.    ...
  4. };
  5. struct monTypeEdge
  6. {
  7.    double longueur;
  8. };
  9. typedef boost::adjacency_list<
  10.    boost::listS, boost::vecS, boost::bidirectionalS,
  11.    monTypeVertex, monTypeEdge> monTypeGraphe;
  12.    ...
  13. vector<double> distances(num_vertices(monGraphe));
  14. dijkstra_shortest_paths(monGraphe, monVertexDepart,
  15.    weight_map(get(&monTypeEdge::longueur, monGraphe))
  16.    .distance_map(make_iterator_property_map(distances.begin(),
  17.    get(vertex_index, monGraphe))));


 
Seulement je n'ai pas trop saisi comment récupérer les plus courts chemins par la suite (il faut dire que la doc n'est pas d'une clarté/simplicité incroyable). J'imagine qu'il y a une map de prédecesseurs associées aux sommets du graphe, mais je ne sais pas comment la récupérer et l'utiliser.
 
Merci d'avance pour votre aide  :jap:

mood
Publicité
Posté le 18-07-2008 à 20:53:04  profilanswer
 

n°1761792
Joel F
Real men use unique_ptr
Posté le 18-07-2008 à 21:27:37  profilanswer
 

le prototype est :
 

Code :
  1. void dijkstra_shortest_paths
  2.   (const Graph& g,
  3.    typename graph_traits<Graph>::vertex_descriptor s,
  4.    PredecessorMap predecessor, DistanceMap distance, WeightMap weight,
  5.    VertexIndexMap index_map,
  6.    CompareFunction compare, CombineFunction combine, DistInf inf, DistZero zero,
  7.    DijkstraVisitor vis, ColorMap color = default)


 
le 3e argument contient la map des prédécesseurs. As tu regardé :
http://www.boost.org/doc/libs/1_35 [...] xample.cpp ???

n°1762014
fhr
Posté le 19-07-2008 à 18:07:14  profilanswer
 

Merci, effectivement en m'acharnant un peu sur l'exemple, j'ai fini par comprendre. Au final, je fais mon appel comme ça :
 

Code :
  1. vector<double> distances(num_vertices(visibility));
  2. vector<VisibilityVertexDescriptor> predecesseurs (num_vertices(visibility));
  3. dijkstra_shortest_paths(monGraphe, monVertexDepart,
  4.    predecessor_map(&predecesseurs[0])
  5.    .weight_map(get(&monTypeEdge::longueur, monGraphe))
  6.    .distance_map(&distances[0]));


 
Note à benêts : (dans mon cas au moins), il fallait paramétrer le graphe avec boost::undirectedS et pas boost::bidirectionalS.


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  Dijkstra et Boost

 

Sujets relatifs
boost filesystem & fichiers en lecture seuleCompiler Boost sous MacOS X en STATIC
Utilisation boost::spiritUn usage de boost::function dans un appel à boost::thread
Usage de Singleton de Boost::Detail::Thread ?Pourquoi Boost n'implemente pas sa class STRING ?
VISUAL Intégrer une librairie directement dans un executable (boost+)Probleme boost regex
BOOST::RANDOM pas random du tout :([C++] Tests Unitaires avec Boost
Plus de sujets relatifs à : Dijkstra et Boost


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR