Projet tutoré 3 - Graphes
CGraphe.h
Aller à la documentation de ce fichier.
1 /*!
2  * \file CGraphe.h
3  * \brief Fichier contenant la déclaration de la classe CGraphe
4  * \author Guillaume ELAMBERT
5  * \author Clément NONCHER-GILLET
6  * \date 2021
7  */
8 
9 
10 #ifndef CGRAPHE_H
11 #define CGRAPHE_H
12 
13 #include <regex>
14 #include <fstream>
15 #include <string.h>
16 #include "CSommet.h"
17 #include "CArc.h"
18 #include "CException.h"
19 
20 
21 #define CGRAPHE_Chaine_Initialisation_Nulle 1
22 #define CGRAPHE_Ouverture_Fichier_Impossible 2
23 #define CGRAPHE_Auto_Referencement 3
24 #define CGRAPHE_Erreur_Syntaxe 4
25 #define CGRAPHE_Erreur_NbSommets 5
26 #define CGRAPHE_Erreur_NbArcs 6
27 #define CGRAPHE_Sommet_Inconnu 7
28 #define CGRAPHE_Sommet_Existant 8
29 #define CGRAPHE_Arc_Inconnu 9
30 #define CGRAPHE_Arc_Existant 10
31 #define CGRAPHE_Alloc_Echouee 11
32 
33 
34 /*!
35  * \brief Classe du graphe.
36  * \author Guillaume ELAMBERT
37  * \author Clément NONCHER-GILLET
38  * \date 2021
39  */
40 class CGraphe
41 {
42 private :
43 
44  CSommet ** pSOMGPHListeSommet; /*!< La liste des sommets du graphe. */
45  unsigned int uGPHTailleLSom; /*!< Le nombre de sommets du graphe. */
46 
47 
48 public:
49 
50  /*!
51  * Constructeur par défaut
52  *
53  */
54  CGraphe(void);
55 
56 
57  /*!
58  * Constructeur de recopie
59  *
60  * \param GPHParam L'objet CGraphe à copier
61  */
62  CGraphe(CGraphe & GPHParam);
63 
64 
65  /*!
66  * Constructeur de confort
67  * Création d'un graphe correctement initialisé à partir d'une chaîne de caractère OU un chemin vers un fichier contenant la chaîne de caractères.
68  * OU Une erreur si contenu est mal formatté ou qu'il contient des incohérences ou des erreurs.
69  *
70  * \param cpContenu La chaîne de caractère utilisée pour initialiser l'objet CGraphe
71  * \param bContenuEstChemin Un booléen qui indique si la variable cpContenu correspond à un chemin vers un fichier contenant l'initialisation d'un CGraphe (true) ou s'il s'agit directement d'une chaîne de caractère d'initialisation
72  */
73  CGraphe(const char * cpContenu, bool bContenuEstChemin);
74 
75 
76  /*!
77  * Destructeur par défaut
78  *
79  */
80  ~CGraphe(void);
81 
82 
83 
84  /*!
85  * Cherche si le sommet existe
86  *
87  * \param uId Un numero de sommet
88  * \return L'index du sommet cherché
89  */
90  int GPHChercherSommet(unsigned int uId);
91 
92 
93  /*!
94  * Ajoute un nouveau sommet dans le graphe.
95  * OU renvoie une erreur si le sommet existe déjà
96  *
97  * \param uNumero Le numéro du nouveau sommet charché.
98  * \return L'index du sommet créé
99  */
100  unsigned int GPHAjouterSommet(unsigned int uNumero);
101 
102 
103 
104  /*!
105  * Supprime un sommet dans le graphe.
106  * Supprime le sommet de numero uId du graphe ainsi que tout ses liens avec les autres sommets.
107  * OU renvoie une erreur si le sommet n'existe pas
108  *
109  * \param uId Numéro du sommet à supprimer
110  */
111  void GPHSupprimerSommet(unsigned int uId);
112 
113 
114 
115  /*!
116  * Vérifie si deux sommets sont liés dans le sens sommet n° uSommetDep vers sommet n° uSommetArr
117  *
118  * \param uSommetDep Le sommet de départ
119  * \param uSommetArr Le sommet d'arrivé
120  * \return true si les deux sommets sons liés dans le sens sommet n° uSommetDep vers sommet n° uSommetArr false sinon
121  */
122  bool GPHLiees(unsigned int uSommetDep, unsigned int uSommetArr);
123 
124 
125  /*!
126  * Lie deux sommets du graphe (créé l'arc Sommet de n° uIdDepart vers Sommet de n° uIdArrivee).
127  * OU renvoie une erreur s'il existe déjà un arc dirigé entre les deux sommets (càd de Sommet de n° uIdDepart vers Sommet de n° uIdArrivee)
128  *
129  * \param uIdDepart Le numéro du sommet de départ
130  * \param uIdArrivee Le numéro du sommet d'arrivé
131  */
132  void GPHLierSommets(unsigned int uIdDepart, unsigned int uIdArrivee);
133 
134 
135 
136  /*!
137  * Délie deux sommets du graphe (supprime l'arc Sommet de n° uIdDepart vers Sommet de n° uIdArrivee).
138  * OU renvoie une erreur si l'arc n'existe pas
139  *
140  * \param uIdDepart Le numéro du sommet de départ
141  * \param uIdArrivee Le numéro du sommet d'arrivé
142  */
143  void GPHDelierSommets(unsigned int uIdDepart, unsigned int uIdArrivee);
144 
145 
146  /*!
147  * Renvoie les numéros des arcs sortants d'un sommet.
148  *
149  * \param uId Le numero du sommet dont on veut les arcs sortants
150  * \return Un tableau d'entiers contenant les arcs sortant et en première position le nombre d'éléments scannés.
151  */
152  unsigned int * GPHLireArcsS(unsigned int uId);
153 
154 
155  /*!
156  * Renvoie les numéros des arcs arrivants d'un sommet.
157  *
158  * \param uId Le numero du sommet dont on veut les arcs arrivants
159  * \return Un tableau d'entiers contenant les arcs arrivants et en première position le nombre d'éléments scannés.
160  */
161  unsigned int * GPHLireArcsA(unsigned int uId);
162 
163 
164  /*!
165  * Affiche le sommet de numéro uId
166  *
167  * \param uId Le numéro du sommet à afficher
168  */
169  void GPHAfficherSommet(unsigned int uId);
170 
171 
172 
173  /*!
174  * Affiche le graphe
175  *
176  */
177  void GPHAfficherGraphe();
178 
179 
180  /*!
181  * Inverse les arcs du graphe : les arcs sortants deviennent arrivants et vice-versa
182  *
183  * \return Un nouvel objet CGraphe, inversé par rapport à 'objet appelant
184  */
186 
187 
188  /*!
189  * Surcharge de l'opérateur =
190  * Copie le contenu de GPHParam dans l'objet appelant
191  *
192  * \param GPHParam L'objet CGraphe à copier
193  * \return Un pointeur sur l'objet appelant, copie de GPHParam
194  */
195  CGraphe & operator=(CGraphe & GPHParam);
196 };
197 
198 #endif
CGraphe::~CGraphe
~CGraphe(void)
Definition: CGraphe.cpp:220
CGraphe::CGraphe
CGraphe(void)
Definition: CGraphe.cpp:17
CGraphe::GPHLireArcsA
unsigned int * GPHLireArcsA(unsigned int uId)
Definition: CGraphe.cpp:512
CSommet.h
Fichier contenant la déclaration de la classe CSommet.
CGraphe::GPHDelierSommets
void GPHDelierSommets(unsigned int uIdDepart, unsigned int uIdArrivee)
Definition: CGraphe.cpp:423
CGraphe::GPHLireArcsS
unsigned int * GPHLireArcsS(unsigned int uId)
Definition: CGraphe.cpp:473
CGraphe::GPHLiees
bool GPHLiees(unsigned int uSommetDep, unsigned int uSommetArr)
Definition: CGraphe.cpp:343
CGraphe::uGPHTailleLSom
unsigned int uGPHTailleLSom
Definition: CGraphe.h:45
CArc.h
Fichier contenant la déclaration de la classe CArc.
CGraphe::GPHChercherSommet
int GPHChercherSommet(unsigned int uId)
Definition: CGraphe.cpp:233
CGraphe
Classe du graphe.
Definition: CGraphe.h:41
CGraphe::GPHAfficherGraphe
void GPHAfficherGraphe()
Definition: CGraphe.cpp:571
CException.h
Fichier contenant la déclaration de la classe CException.
CGraphe::operator=
CGraphe & operator=(CGraphe &GPHParam)
Definition: CGraphe.cpp:613
CGraphe::GPHAfficherSommet
void GPHAfficherSommet(unsigned int uId)
Definition: CGraphe.cpp:550
CGraphe::GPHSupprimerSommet
void GPHSupprimerSommet(unsigned int uId)
Definition: CGraphe.cpp:288
CGraphe::GPHRenverserGraphe
CGraphe & GPHRenverserGraphe()
Definition: CGraphe.cpp:594
CGraphe::GPHLierSommets
void GPHLierSommets(unsigned int uIdDepart, unsigned int uIdArrivee)
Definition: CGraphe.cpp:362
CSommet
Classe des sommets d'un graphe.
Definition: CSommet.h:29
CGraphe::GPHAjouterSommet
unsigned int GPHAjouterSommet(unsigned int uNumero)
Definition: CGraphe.cpp:252
CGraphe::pSOMGPHListeSommet
CSommet ** pSOMGPHListeSommet
Definition: CGraphe.h:44