IdentifiantMot de passe
Loading...
Mot de passe oubli� ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les r�ponses en temps r�el, voter pour les messages, poser vos propres questions et recevoir la newsletter

Contribuez C++ Discussion :

Boost Graph [Tutoriel]


Sujet :

Contribuez C++

  1. #1
    Inactif  


    Homme Profil pro
    Inscrit en
    Novembre 2008
    Messages
    5 288
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 49
    Localisation : France, Rh�ne (Rh�ne Alpes)

    Informations professionnelles :
    Secteur : Sant�

    Informations forums :
    Inscription : Novembre 2008
    Messages : 5 288
    Par d�faut Boost Graph
    Premi�re version (incompl�te) pour une FAQ sur Boost Graph. J'ai remarqu� que beaucoup de d�butant (moi compris) h�sitaient � l'utiliser parce qu'elle semble complexe en premier abord.

    EDIT : version finale dans l'article : http://gbelz.developpez.com/boost/graph/

  2. #2
    R�dacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par d�faut
    whouh

    Pourquoi ne pas proposer un tutoriel ?

  3. #3
    r0d
    r0d est d�connect�
    Membre exp�riment�

    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Ao�t 2004
    Messages
    4 299
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rh�ne Alpes)

    Informations professionnelles :
    Activit� : D�veloppeur informatique

    Informations forums :
    Inscription : Ao�t 2004
    Messages : 4 299
    Billets dans le blog
    2
    Par d�faut
    Ooomaagaaad!!!!
    Si tu avais �cris �a il y a deux ans, �a m'aurait �vit� des heures et des heures de codage de ma propre lib de graphe, qui au final est toute pourrite en plus. Je n'�tais pas parvenu � utiliser boost.graph et j'avais abandonn�

    Un �norme
    Je regarderai �a quand j'aurais quelques heures devant moi

    Encore merci!

  4. #4
    Inactif  


    Homme Profil pro
    Inscrit en
    Novembre 2008
    Messages
    5 288
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 49
    Localisation : France, Rh�ne (Rh�ne Alpes)

    Informations professionnelles :
    Secteur : Sant�

    Informations forums :
    Inscription : Novembre 2008
    Messages : 5 288
    Par d�faut
    Il y a d�j� un tutoriel sur Boost graph, �a ferait doublon. Et le but est surtout de donner des lignes de code directement exploitable (comprendre copi�-collable) avec juste les explications n�cessaires.

  5. #5
    Expert confirm�
    Avatar de Luc Hermitte
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Ao�t 2003
    Messages
    5 296
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyr�n�es)

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : A�ronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Ao�t 2003
    Messages : 5 296
    Par d�faut
    Je manque de recul aussi.
    Toujours est-il que c'est plus pour du tuto que de la FAQ � mon go�t.

    PS: (syntaxe vim pour substitute)
    s/graph\(s\=\)\>/graphe\1/gc
    s/g�n�ric/g�n�rique/
    s/librairie/biblioth�que/

    D�sol� de ne pas �tre plus constructif, je ne pratique pas cette biblioth�que.
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne r�ponds � aucune question technique par le biais de ce m�dia. Et de toutes fa�ons, ma BAL sur dvpz est pleine...

  6. #6
    Inactif  


    Homme Profil pro
    Inscrit en
    Novembre 2008
    Messages
    5 288
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 49
    Localisation : France, Rh�ne (Rh�ne Alpes)

    Informations professionnelles :
    Secteur : Sant�

    Informations forums :
    Inscription : Novembre 2008
    Messages : 5 288
    Par d�faut
    # Que signifie les param�tres pass�s � adjacent_list ?
    adjacency_list est une classe templat�e acceptant plusieurs param�tres permettant de sp�cifier le comportement de cette classe. Ces param�tres permettent de choisir les types de conteneurs utilis�s en interne (OutEdgeList, VertexList et EdgeList), les propri�t�s associ�es aux �l�ments du graphe (VertexProperties, EdgeProperties, GraphProperties et Directed).

    Voici la liste des param�tres et les valeurs par d�faut de adjacency_list :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    adjacency_list<
       OutEdgeList 		= vecS, 
       VertexList 		= vecS, 
       Directed		= directedS,
       VertexProperties 	= no_property,  
       EdgeProperties 	= no_property,
       GraphProperties 	= no_property, 
       EdgeList		= listS
    >
    1. Les types des conteneurs (OutEdgeList, VertexList et EdgeList) peuvent �tre choisir en utilisant les tags pr�cis�s dans la liste suivante :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    vecS		= std::vector
    listS		= std::list
    slistS		= std::slist
    setS		= std::set
    multisetS	= std::multiset
    hash_setS	= std::hash_set
    Le choix du type de conteneur aura une influence sur les performances des algorithmes utilis�s. La complexit� des fonctions de Boost Graph en fonction du type de conteneur est indiqu� dans la page suivante : Choosing the Edgelist and VertexList

    2. Pour les propri�t�s associ�es aux �l�ments d'un graphe, on peut soit utiliser le mot cl� no_property pour ne pas associer d'information, soit utiliser une des m�thodes indiqu�es dans la FAQ
    # Quelles sont les diff�rentes m�thodes permettant d'associer des informations � un �l�ment de Boost Graph ?

    3. Pour terminer, le param�tre Directed permet de pr�ciser si le graphe est orient� ou non et si les arcs seront unidirectionnels ou bidirectionnels.
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    undirectedS	= graphe non orienté
    directedS	= graphe orienté avec des arcs unidirectionnels
    bidirectionalS	= graphe orienté avec des arcs bidirectionnels
    En fonction du type de graphe, certaines fonctions ne seront pas disponibles. Par exemple, avec un graphe orient� unidirectionnel, la fonction in_edges, permettant de r�cup�rer la liste des arcs entrant, n'est pas possible.

  7. #7
    Inactif  


    Homme Profil pro
    Inscrit en
    Novembre 2008
    Messages
    5 288
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 49
    Localisation : France, Rh�ne (Rh�ne Alpes)

    Informations professionnelles :
    Secteur : Sant�

    Informations forums :
    Inscription : Novembre 2008
    Messages : 5 288
    Par d�faut
    Citation Envoy� par Luc Hermitte Voir le message
    PS: (syntaxe vim pour substitute)
    s/graph\(s\=\)\>/graphe\1/gc
    s/g�n�ric/g�n�rique/
    s/librairie/biblioth�que/
    Fait

  8. #8
    Inactif  


    Homme Profil pro
    Inscrit en
    Novembre 2008
    Messages
    5 288
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 49
    Localisation : France, Rh�ne (Rh�ne Alpes)

    Informations professionnelles :
    Secteur : Sant�

    Informations forums :
    Inscription : Novembre 2008
    Messages : 5 288
    Par d�faut
    En fait, � la base, ce n'�tait que quelques notes que j'avais pris lorsque j'avais regard� BGL. Je pensais pas que �a prendrait tant de place au final. Finalement, �a va probablement finir en article.

  9. #9
    Membre �m�rite
    Profil pro
    Ing�nieur d�veloppement logiciels
    Inscrit en
    Mars 2009
    Messages
    552
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activit� : Ing�nieur d�veloppement logiciels

    Informations forums :
    Inscription : Mars 2009
    Messages : 552
    Par d�faut
    Bonsoir,

    Tr�s bonne initiative! En effet, un article, �a serait pas mal. Quelques remarques (� valider).

    Renvoyer aussi vers ce tuto?

    http://matthieu-brucher.developpez.c...mplementation/

    remove/clear

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
     
    // suppression d'un sommet
    remove_vertex(v1, g);
    Peut-�tre souligner le fait qu'un sommet est suppos� "clean" avant de faire "remove" (sinon, on provoque une catastrophe)

    => pour ne pas se prendre le choux
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
     
    clear_vertex(v1,g);
    remove_vertex(v1, g);
    undirectedS/directedS/bidirectionalS

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
     
    undirectedS	   = graphe non orienté
    directedS	   = graphe orienté avec des arcs unidirectionnels
    bidirectionalS = graphe orienté avec des arcs bidirectionnels
    Peut-�tre pr�ciser la notion de unidirectionnels/bidirectionnels. En gros :

    directedS ne permet pas de r�cup�rer les arcs entrants dans un sommet (in_edges) d'o� l�existence de bidirectionalS. Tous deux sont des graphes orient�s au niveau conceptuel.

    => Par d�faut, on choisit entre undirectedS ou birectionalS en fonction de la nature du graphe (non orient� / orient�). directedS sera une optimisation possible pour consommer moins de m�moire.

    Faire une note sur boost::tie

    C'est assez paumant dans la documentation officielle quand on ne le connait pas.

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
     
    // Récupérer tous les sommets
    std::pair<vertex_iterator_t, vertex_iterator_t> it = boost::vertices(g);
    // Equivalent à ce qu'on rencontre dans la doc sous forme de 
    vertex_iterator it, it_end;
    boost::tie( it, it_end ) = boost::vertices(g);

    Mise en garde

    La structure doit �tre adapt�e aux algorithmes. Les algorithmes sont rarement impl�ment�s en fonction du conteneur (escroquerie template ).

    Exemple :

    - On peut concevoir la notion de graphe planaire sur un graphe orient� (en ignorant l'orientation). Le test de plan�it� ne sera pourtant correct que sur un undirectedS.

    - Si in_edges n'est pas pr�sent dans la structure (directedS), boost::graph ne s'amuse pas � calculer sans. On n'a pas par exemple in_degree sur la base d'un scan/comptage de la liste des arcs.

    Comme je le faisais remarquer, c'est un peu comme si std::find ne fonctionnait pas sur std::vector puisqu'il n'est pas index�.


    bundle properties

    Tu ne parles pas de la syntaxe commode :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
     
    vertex_descriptor v = /* ... */
    VertexProperties const& vertexProperties = g[v];
     
    edge_descriptor e = /* ... */
    EdgeProperties const& vertexProperties = g[e];
    C'est le mal?


    ++

  10. #10
    Inactif  


    Homme Profil pro
    Inscrit en
    Novembre 2008
    Messages
    5 288
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 49
    Localisation : France, Rh�ne (Rh�ne Alpes)

    Informations professionnelles :
    Secteur : Sant�

    Informations forums :
    Inscription : Novembre 2008
    Messages : 5 288
    Par d�faut
    Renvoyer aussi vers ce tuto?
    �a sera fait dans la version finale de l'article

    remove/clear
    undirectedS/directedS/bidirectionalS
    Faire une note sur boost::tie
    Mise en garde
    Si le format devient un article plut�t qu'une FAQ, je pourrais d�tailler un peu plus ces parties. En particulier donner quelques lignes de code pour chaque analyses les plus utilis�es sur les graphes. Et d�tailler les algorithmes fournit pas BGL.

    bundle properties
    Un oubli de ma part


    HS : j'ai �galement plein de notes sur C++11, �a pourrait int�resser un article ?

  11. #11
    Membre �m�rite
    Profil pro
    Ing�nieur d�veloppement logiciels
    Inscrit en
    Mars 2009
    Messages
    552
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activit� : Ing�nieur d�veloppement logiciels

    Informations forums :
    Inscription : Mars 2009
    Messages : 552
    Par d�faut
    Pas facile d'organiser ce genre d'information. Je t'ai remis ce qui m'a le plus g�ner il y a 3/4 mois.

    Bon courage


    Citation Envoy� par gbdivers Voir le message
    HS : j'ai �galement plein de notes sur C++11, �a pourrait int�resser un article ?
    Dans 10 ans oui (Il y en a qui esp�re encore le support de Visual 6...) Mais ne divergeons pas

  12. #12
    Membre Expert

    Homme Profil pro
    Ing�nieur d�veloppement logiciels
    Inscrit en
    Ao�t 2004
    Messages
    1 391
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 35
    Localisation : France, Doubs (Franche Comt�)

    Informations professionnelles :
    Activit� : Ing�nieur d�veloppement logiciels

    Informations forums :
    Inscription : Ao�t 2004
    Messages : 1 391
    Par d�faut
    Citation Envoy� par gbdivers Voir le message
    HS : j'ai �galement plein de notes sur C++11, �a pourrait int�resser un article ?
    Oui, mais plut�t pour des entr�e de FaQ (je crois qu'il n'y a pas encore grand chose sur le C++11) AMA, ou des articles plus approfondis sur des points pr�cis du C++11 (faire un seul article sur tout donnerait quelque chose d'un peu "brouillon" et superficiel je pense).

  13. #13
    Inactif  


    Homme Profil pro
    Inscrit en
    Novembre 2008
    Messages
    5 288
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 49
    Localisation : France, Rh�ne (Rh�ne Alpes)

    Informations professionnelles :
    Secteur : Sant�

    Informations forums :
    Inscription : Novembre 2008
    Messages : 5 288
    Par d�faut
    Voici une premi�re derni�re version
    Images attach�es Images attach�es

  14. #14
    Membre �m�rite
    Profil pro
    Ing�nieur d�veloppement logiciels
    Inscrit en
    Mars 2009
    Messages
    552
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activit� : Ing�nieur d�veloppement logiciels

    Informations forums :
    Inscription : Mars 2009
    Messages : 552
    Par d�faut
    Nickel, merci!

  15. #15
    Inactif  


    Homme Profil pro
    Inscrit en
    Novembre 2008
    Messages
    5 288
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 49
    Localisation : France, Rh�ne (Rh�ne Alpes)

    Informations professionnelles :
    Secteur : Sant�

    Informations forums :
    Inscription : Novembre 2008
    Messages : 5 288
    Par d�faut
    Petite pr�cision, j'ai volontairement peu abord� la partie algo, si quelqu'un souhaite s'y coller, �a me va
    Je posterai le tuto en relecture ortho pendant les vacances pour une annonce en d�but d'ann�e

  16. #16
    Membre �clair�
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    301
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 301
    Par d�faut
    Salut,

    J'ai pas tout lu en d�tail mais fin de la page 5, les m�thodes source et target renvoient des vertex_descriptor et non pas des edge_descriptor:
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    Graph::edge_descriptor v1 = boost::target(e1, g);
    Graph::edge_descriptor v2 = boost::source(e5, g);
    if (v1 == v2)
      std::cout << "Same vertex" << std::endl;
    � remplacer par
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    Graph::vertex_descriptor v1 = boost::target(e1, g);
    Graph::vertex_descriptor v2 = boost::source(e5, g);
    if (v1 == v2)
      std::cout << "Same vertex" << std::endl;

  17. #17
    R�dacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par d�faut

  18. #18
    Inactif  


    Homme Profil pro
    Inscrit en
    Novembre 2008
    Messages
    5 288
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 49
    Localisation : France, Rh�ne (Rh�ne Alpes)

    Informations professionnelles :
    Secteur : Sant�

    Informations forums :
    Inscription : Novembre 2008
    Messages : 5 288
    Par d�faut
    Citation Envoy� par CedricMocquillon Voir le message
    Salut,

    J'ai pas tout lu en d�tail mais fin de la page 5, les m�thodes source et target renvoient des vertex_descriptor et non pas des edge_descriptor:
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    Graph::edge_descriptor v1 = boost::target(e1, g);
    Graph::edge_descriptor v2 = boost::source(e5, g);
    if (v1 == v2)
      std::cout << "Same vertex" << std::endl;
    � remplacer par
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    Graph::vertex_descriptor v1 = boost::target(e1, g);
    Graph::vertex_descriptor v2 = boost::source(e5, g);
    if (v1 == v2)
      std::cout << "Same vertex" << std::endl;
    Fait.

    Et propos� en relecture ortho

  19. #19
    Inactif  


    Homme Profil pro
    Inscrit en
    Novembre 2008
    Messages
    5 288
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 49
    Localisation : France, Rh�ne (Rh�ne Alpes)

    Informations professionnelles :
    Secteur : Sant�

    Informations forums :
    Inscription : Novembre 2008
    Messages : 5 288
    Par d�faut
    Version finale : http://gbelz.developpez.com/boost/graph
    A archiver et � annoncer sur le portail
    Merci � tous

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. Boost.Graph : Comment utiliser tout �a?
    Par Xanto dans le forum Boost
    R�ponses: 1
    Dernier message: 08/05/2009, 19h48
  2. Utilisation de Boost::Graph
    Par dj_benz dans le forum Boost
    R�ponses: 6
    Dernier message: 01/10/2008, 09h56
  3. Bibli Boost Graph
    Par devroot dans le forum Boost
    R�ponses: 5
    Dernier message: 10/09/2008, 12h38
  4. conctruction de la librairie boost graph
    Par jiim dans le forum Biblioth�ques
    R�ponses: 1
    Dernier message: 10/03/2005, 22h30

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo