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

C++ Discussion :

Programme de parcours en largeur BFS


Sujet :

C++

  1. #1
    Futur Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Octobre 2019
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2019
    Messages : 20
    Points : 9
    Points
    9
    Par défaut Programme de parcours en largeur BFS
    Bonjour,
    dans le cadre de mon apprentissage du C++, j'aimerai réaliser un parcours en largeur (BFS) de tous les sommets de mon graphe (chargé depuis un fichier).
    Cependant après plusieurs recherches sur le sujet, je n'arrive pas vraiment à l'appliquer à mes classes Sommets et Graphe suivantes :

    Fichier graphe.h :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    #include "sommet.h"
    #include <iostream>
    #include <iomanip>
    #include <fstream>
    #include <string>
    #include <vector>
    #include <algorithm>
    #include <list>
    #include <cmath>
    #include <string>
    #include <stdexcept>
     
    class Graphe
    {
    private:
    int m_orient, m_ordre, m_taille;
    std::vector<Sommet*> m_sommets;
    std::vector<unsigned char> visite;
     
    public:
    void Afficher() const;
    Graphe(std::string nomFichier);
    void BFS(int choix);
    };
    Fichier graphe.cpp :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    #include "graphe.h"
     
    Graphe::Graphe(std::string nomFichier)
    {
    std::ifstream ifs{ nomFichier };
     
    int orient;
    ifs >> m_orient;
     
    int ordre;
    //lecture de l'ordre
    ifs >> m_ordre;
     
    int taille;
    ifs >> m_taille;
     
    for (int i = 0; i < 15; ++i)
    m_sommets.push_back(new Sommet{ i });
     
    int id1, id2;
    for (int i = 0; i <= 16; ++i)
    {
    ifs >> id1 >> id2;
    m_sommets[id1]->adja(id2);
    m_sommets[id2]->adja(id1);
    }
    }
     
    void Graphe::Afficher() const
    {
    std::cout << "orientation : " << m_orient << " / ordre : " << m_ordre << " / taille : " << m_taille << std::endl;
    std::cout << "Liste d'adjacence" << std::endl;
    for (size_t i = 0; i < m_sommets.size(); ++i)
    {
    std::cout << "Sommet nb " << m_sommets[i]->getNb() << " : ";
     
    m_sommets[i]->getAdja();
     
    std::cout << std::endl;
    }
    }
    Fichier Sommet.h :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    #include <iostream>
    #include <iomanip>
    #include <istream>
    #include <fstream>
    #include <string>
    #include <vector>
    #include <list>
    #include <algorithm>
    #include <cmath>
    #include <string>
    #include <stdexcept>
    class Sommet
    {
    private:
    int m_nb;
    std::vector<Sommet> m_adjacents;
     
    public:
    Sommet(std::istream& is);
    Sommet(int nb);
    int getNb();
    void setNb(int nb);
    void adja(int nb);
    std::vector<Sommet> getAdja();
    };
    Fichier Sommet.cpp
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    #include "sommet.h"
     
    Sommet::Sommet(std::istream& is)
    {
    is >> m_nb;
    if (is.fail())
    throw std::runtime_error("Probleme lecture id,x,y d'une station");
    }
     
    Sommet::Sommet(int nb)
    {
    m_nb = nb;
    }
     
    int Sommet::getNb()
    {
    return this->m_nb;
    }
     
    void Sommet::setNb(int nb)
    {
    m_nb = nb;
    }
     
    void Sommet::adja(int nb)
    {
    m_adjacents.push_back(nb);
    }
     
    std::vector<Sommet> Sommet::getAdja()
    {
    for (size_t i = 0; i < m_adjacents.size(); ++i)
    std::cout << m_adjacents[i].m_nb << " ";
     
    return m_adjacents;
    }
    Je n'arrive pas vraiment à appliquer l'algorithme de parcours en largeur que je pensais avoir bien compris, à l'organisation de mon programme.
    Si l'un d'entre vous pourrait m'aider ça sera vraiment sympa, merci d'avance

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 115
    Points : 32 967
    Points
    32 967
    Billets dans le blog
    4
    Par défaut
    Et le problème est ?
    Tu sais pas parcourir un vector ? Faire une boucle for ?
    Ton code n'a aucune const-correctness, include un paquet de fichiers inutiles, tu fais des copies inutiles et l'utilisation de pointeurs est mauvaise.
    D'où sortent ces chiffres magiques ? 15, 16 ? Pourquoi faire des cout dans des getter ?
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2021
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Mars 2021
    Messages : 1
    Points : 1
    Points
    1
    Par défaut
    heyy, est-ce que t'aurais la solution de ton probleme stp ?

Discussions similaires

  1. Parcours en largeur sur un ABR
    Par rune93 dans le forum C
    Réponses: 1
    Dernier message: 13/04/2008, 22h53
  2. Parcours en largeur d'un graphe
    Par line86 dans le forum C
    Réponses: 10
    Dernier message: 30/10/2007, 13h38
  3. Graphe - Parcours en largeur
    Par lusiole dans le forum C
    Réponses: 14
    Dernier message: 29/08/2007, 14h44
  4. Parcours en largeur d'une arborescence->Vector
    Par Paniez dans le forum Algorithmes et structures de données
    Réponses: 2
    Dernier message: 07/12/2006, 22h21
  5. Programme C++ parcours arbo
    Par blooder dans le forum C++
    Réponses: 1
    Dernier message: 26/04/2006, 19h38

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