Projet tutoré 3 - Graphes
Référence de la classe CSommet

Classe des sommets d'un graphe. Plus de détails...

#include <CSommet.h>

Fonctions membres publiques

 CSommet (void)
 
 CSommet (unsigned int uNid)
 
 CSommet (CSommet &SOMParam)
 
 ~CSommet (void)
 
unsigned int SOMGetId ()
 
unsigned int SOMGetTailleA ()
 
unsigned int SOMGetTailleS ()
 
void SOMAjouterArcArrivant (unsigned int uDestination)
 
void SOMRetirerArcArrivant (unsigned int uDestination)
 
int SOMChercherArcArrivant (unsigned int uSOMIdDestination)
 
CArcSOMLireListeA (unsigned int uPos)
 
void SOMAjouterArcSortant (unsigned int uDestination)
 
void SOMRetirerArcSortant (unsigned int uDestination)
 
int SOMChercherArcSortant (unsigned int uSOMIdDestination)
 
CArcSOMLireListeS (unsigned int uPos)
 
bool SOMLies (CSommet &SOMParam)
 
void SOMInverser ()
 
void SOMAfficherSommet ()
 
CSommetoperator= (const CSommet &SOMParam)
 

Attributs privés

unsigned int uSOMId
 
CArc ** pARCSOMListeArcsArrivants
 
unsigned int uSOMTailleListeA
 
CArc ** pARCSOMListeArcsSortants
 
unsigned int uSOMTailleListeS
 

Description détaillée

Classe des sommets d'un graphe.

Auteur
Guillaume ELAMBERT
Clément NONCHER-GILLET
Date
2021

Définition à la ligne 28 du fichier CSommet.h.

Documentation des constructeurs et destructeur

◆ CSommet() [1/3]

CSommet::CSommet ( void  )

Constructeur par défaut

Définition à la ligne 17 du fichier CSommet.cpp.

18 {
21  uSOMId = 0;
22  uSOMTailleListeA = 0;
23  uSOMTailleListeS = 0;
24 }

◆ CSommet() [2/3]

CSommet::CSommet ( unsigned int  uNid)

Constructeur de confort

Paramètres
uNidLe numéro du sommet

Définition à la ligne 32 du fichier CSommet.cpp.

32  {
33 
36  uSOMId = uNid;
37  uSOMTailleListeA = 0;
38  uSOMTailleListeS = 0;
39 }

◆ CSommet() [3/3]

CSommet::CSommet ( CSommet SOMParam)

Constructeur de recopie. Créé un objet CSommet copie de SOMParam.

Paramètres
SOMParamL'objet CSommet à copier

Définition à la ligne 48 du fichier CSommet.cpp.

49 {
50  //On fait appel à la surcharge de l'opérateur =
51  *this = SOMParam;
52 }

◆ ~CSommet()

CSommet::~CSommet ( void  )

Destructeur par défaut

Définition à la ligne 59 du fichier CSommet.cpp.

60 {
61  //On appel le destructeur pour tous les arcs arrivants
62  //Et on d"salloue la liste
64 
65  for (unsigned uBoucle = 0; uBoucle < this->uSOMTailleListeA; ++uBoucle) {
66  delete pARCSOMListeArcsArrivants[uBoucle];
67  }
68 
70  }
71 
72  //On fait pareil pour les arcs sortants
74 
75  for (unsigned uBoucle = 0; uBoucle < this->uSOMTailleListeS; ++uBoucle) {
76  delete pARCSOMListeArcsSortants[uBoucle];
77  }
78 
80  }
81 }

Documentation des fonctions membres

◆ operator=()

CSommet & CSommet::operator= ( const CSommet SOMParam)

Surcharge de l'operateur = Copie le contenu de SOMParam dans l'objet appelant

Paramètres
SOMParamL'objet CSommet à copier
Renvoie
Un pointeur sur l'objet appelant, copie de SOMParam

Définition à la ligne 444 du fichier CSommet.cpp.

445 {
446  if (this != &SOMParam) {
447  uSOMId = SOMParam.uSOMId;
450 
451  //On alloue les nouvelles listes des arcs
452  if ( ( pARCSOMListeArcsArrivants = (CArc **) realloc( pARCSOMListeArcsArrivants, sizeof(CArc *) * (SOMParam.uSOMTailleListeA) ) ) == NULL
453  || ( pARCSOMListeArcsSortants = (CArc **) realloc( pARCSOMListeArcsSortants , sizeof(CArc *) * (SOMParam.uSOMTailleListeS) ) ) == NULL ) {
454 
455  throw(CException(CSOMMET_Alloc_Echouee, "CSommet::operator=(const CSommet & SOMParam) : Erreur d'allocation/réallocation.\n"));
456  }
457 
458  unsigned int uBoucle;
459 
460  //On copier les arcs entrants
461  for (uBoucle = 0; uBoucle < uSOMTailleListeA; uBoucle++) {
462  pARCSOMListeArcsArrivants[uBoucle] = new CArc(*SOMParam.pARCSOMListeArcsArrivants[uBoucle]);
463  }
464 
465  //On copie les arcs sortants
466  for (uBoucle = 0; uBoucle < uSOMTailleListeS; uBoucle++) {
467  pARCSOMListeArcsSortants[uBoucle] = new CArc(*SOMParam.pARCSOMListeArcsSortants[uBoucle]);
468  }
469  }
470  return *this;
471 }

◆ SOMAfficherSommet()

void CSommet::SOMAfficherSommet ( )

Affiche le graphe sur la sortie standard.

Définition à la ligne 405 du fichier CSommet.cpp.

405  {
406  unsigned int uBoucle;
407  std::cout << "L'ID du sommet est : " << uSOMId << std::endl;
408 
409  std::cout << "La liste des arcs arrivants est :" << std::endl;
410 
411  //On parcourt les arcs arrivants et on les affiche (retour à la ligne tous les 3 affichés)
412  for (uBoucle = 0; uBoucle < uSOMTailleListeA; uBoucle++) {
413  std::cout << "\t" << pARCSOMListeArcsArrivants[uBoucle]->ARCGetDestination() << ((uBoucle + 1) % 3 == 0 ? "\n" : "");
414  }
415 
416  //On évite 2 retours à la lignes successifs
417  if (uBoucle % 3 != 0){
418  std::cout << std::endl;
419  }
420 
421  std::cout << "La liste des arcs sortants est :" << std::endl;
422 
423  //On parcourt les arcs sortants et on les affiche (retour à la ligne tous les 3 affichés)
424  for (uBoucle = 0; uBoucle < uSOMTailleListeS; uBoucle++) {
425  std::cout << "\t" << pARCSOMListeArcsSortants[uBoucle]->ARCGetDestination() << ((uBoucle + 1) % 3 == 0 ? "\n" : "");
426  }
427 
428  //On évite 2 retours à la lignes successifs
429  if (uBoucle % 3 != 0){
430  std::cout << std::endl;
431  }
432  std::cout << std::endl;
433 }

◆ SOMAjouterArcArrivant()

void CSommet::SOMAjouterArcArrivant ( unsigned int  uDestination)

Ajoute un arc arrivant au sommet.

Paramètres
uDestinationLa destination de l'objet CArc à ajouter à la liste des arcs arrivants
Précondition
Il n'existe pas d'objet CArc dans la liste des arcs arrivants ayant pour destination uDestination.

Définition à la ligne 122 du fichier CSommet.cpp.

122  {
123 
124  //Verification qu'il n'y ai pas de doublons
125  if (SOMChercherArcArrivant(uDestination) == -1) {
126 
127  CArc ** pARCNouvelleListe = (CArc **) realloc(pARCSOMListeArcsArrivants, sizeof(CArc *)*(++uSOMTailleListeA));
128 
129  //Erreur si allocation échouée
130  if (pARCNouvelleListe == NULL) {
131  throw(CException(CSOMMET_Alloc_Echouee, "CSommet::SOMAjouterArcArrivant(unsigned int uDestination) : Erreur d'allocation/réallocation.\n"));
132  }
133 
134  pARCNouvelleListe[uSOMTailleListeA-1] = new CArc(uDestination);
135  pARCSOMListeArcsArrivants = pARCNouvelleListe;
136  }
137 
138 }

◆ SOMAjouterArcSortant()

void CSommet::SOMAjouterArcSortant ( unsigned int  uDestination)

Ajoute un arc sortant au sommet.

Paramètres
uDestinationLa destination de l'objet CArc à ajouter à la liste des arcs sortants
Précondition
Il n'existe pas d'objet CArc dans la liste des arcs sortants ayant pour destination uDestination.

Définition à la ligne 234 du fichier CSommet.cpp.

235 {
236 
237  //Verification qu'il n'y ai pas de doublons
238  if (SOMChercherArcSortant(uDestination) == -1) {
239 
240 
241  CArc ** pARCNouvelleListe = (CArc **) realloc(pARCSOMListeArcsSortants, sizeof(CArc *)*(++uSOMTailleListeS));
242 
243  //Erreur si allocation échouée
244  if (pARCNouvelleListe == NULL) {
245  throw(CException(CSOMMET_Alloc_Echouee, "CSommet::SOMAjouterArcSortant(unsigned int uDestination) : Erreur d'allocation/réallocation.\n"));
246  }
247  pARCNouvelleListe[uSOMTailleListeS-1] = new CArc(uDestination);
248  pARCSOMListeArcsSortants = pARCNouvelleListe;
249 
250  }
251 
252 }

◆ SOMChercherArcArrivant()

int CSommet::SOMChercherArcArrivant ( unsigned int  uSOMIdDestination)

Recherche l'arc arrivant ayant pour point de départ le sommet numéro uSOMIdDestination.

Paramètres
uSOMIdDestinationLe numéro du sommet de départ de l'arc
Renvoie
La position de l'arc cherché dans la liste des arcs arrivants si il y est, -1 sinon.

Définition à la ligne 189 du fichier CSommet.cpp.

190 {
191  unsigned int uBoucle;
192 
193  //On parcourt les arcs sortants
194  for (uBoucle = 0; uBoucle < uSOMTailleListeA; uBoucle++) {
195 
196  //Entrée : On trouve un arcs ayant pour destination uSOMIdDestination
197  // => On renvoie l'index
198  if (pARCSOMListeArcsArrivants[uBoucle]->ARCGetDestination() == uSOMIdDestination) {
199  return uBoucle;
200  }
201  }
202  return -1;
203 }

◆ SOMChercherArcSortant()

int CSommet::SOMChercherArcSortant ( unsigned int  uSOMIdDestination)

Recherche l'arc partant ayant pour point d'arrivé le sommet numéro uSOMIdDestination.

Paramètres
uSOMIdDestinationLe numéro du sommet d'arrivé de l'arc
Renvoie
La position de l'arc cherché dans la liste des arcs sortants si il y est, -1 sinon.

Définition à la ligne 303 du fichier CSommet.cpp.

304 {
305  unsigned int uBoucle;
306 
307  //On parcourt les arcs sortants
308  //=> Si on trouve un arcs ayant pour destination uSOMIdDestination : on renvoie l'index
309  for (uBoucle = 0; uBoucle < uSOMTailleListeS; uBoucle++) {
310  if (pARCSOMListeArcsSortants[uBoucle]->ARCGetDestination() == uSOMIdDestination) {
311  return uBoucle;
312  }
313  }
314  return -1;
315 }

◆ SOMGetId()

unsigned int CSommet::SOMGetId ( void  )

Accesseur en lecture de uSOMId.

Renvoie
Le numéro du sommet

Définition à la ligne 89 du fichier CSommet.cpp.

89  {
90  return uSOMId;
91 }

◆ SOMGetTailleA()

unsigned int CSommet::SOMGetTailleA ( )

Accesseur en lecture de uSOMTailleListeArrivants.

Renvoie
Le nombre d'arcs arrivants au sommet

Définition à la ligne 99 du fichier CSommet.cpp.

100 {
101  return uSOMTailleListeA;
102 }

◆ SOMGetTailleS()

unsigned int CSommet::SOMGetTailleS ( )

Accesseur en lecture de uSOMTailleListeS.

Renvoie
Le nombre d'arcs partants du sommet

Définition à la ligne 110 du fichier CSommet.cpp.

111 {
112  return uSOMTailleListeS;
113 }

◆ SOMInverser()

void CSommet::SOMInverser ( )

Inverse les arcs entrants et sortants. Les CArcs arrivants deviennent les CArcs sortants et vice-versa

Définition à la ligne 383 du fichier CSommet.cpp.

383  {
384 
385  //On copie le pointeur sur la liste des arivants
386  CArc **ARCTmp = this->pARCSOMListeArcsArrivants;
387  //On copie la taille de la liste des arivants
388  unsigned uiNbArrivants = this->uSOMTailleListeA;
389 
390  //La liste des arcs arrivants prend le pointeur sur la liste des arcs sortant, idem pour la taille
392  this->uSOMTailleListeA = this->uSOMTailleListeS;
393 
394  //La liste des arcs sortant prend le pointeur sur la liste temporaire (= liste arcs arrivants), idem pour la taille
395  this->pARCSOMListeArcsSortants = ARCTmp;
396  this->uSOMTailleListeS = uiNbArrivants;
397 
398 }

◆ SOMLies()

bool CSommet::SOMLies ( CSommet SOMParam)

Teste si deux sommets sont liés dans le sens *this -> SOMParam

Paramètres
SOMParamL'objet CSommet dont il faut vérifier la connexion avec this
Renvoie
true s'il existe un arc allant de cet objet vers SOMParam, false sinon.

Définition à la ligne 345 du fichier CSommet.cpp.

346 {
347  unsigned int uBoucle;
348  unsigned int uValeurTeste = 0;
349 
350  //On parcourt les arcs arrivants à SOMParam tant qu'on en a pas trouvé provenant de this
351  for (uBoucle = 0; uBoucle < SOMParam.uSOMTailleListeA && uValeurTeste == 0; uBoucle++) {
352 
353  //Entrée : on à trouvé un arc de this ayant pour destination SOMParam
354  // => on incrémente la varable qui sert à vérifier qu'on à trouvé
355  if (SOMParam.pARCSOMListeArcsArrivants[uBoucle]->ARCGetDestination() == SOMGetId()) {
356  uValeurTeste++;
357  }
358  }
359 
360  //Si on à trouvé un résultat dans la boucle précédente :
361  //On parcourt les arcs sortants des this tant qu'on en a pas trouvé ayant pour destination SOMParam
362  for (uBoucle = 0; uBoucle < uSOMTailleListeS && uValeurTeste == 1; uBoucle++) {
363  if (pARCSOMListeArcsSortants[uBoucle]->ARCGetDestination() == SOMParam.SOMGetId()) {
364  uValeurTeste++;
365  }
366  }
367 
368  //Entrée : this contient un arc sortant vers SOMParam
369  // ET SOMParam contient un arcs entrant en provenance de this
370  if (uValeurTeste == 2) {
371  return true;
372  }
373 
374  return false;
375 }

◆ SOMLireListeA()

CArc * CSommet::SOMLireListeA ( unsigned int  uPos)

Lis l'arc arrivant en position uPos de la liste pARCSOMListeArcsArrivants.

Paramètres
uPosLa position de l'arc dans la liste pARCSOMListeArcsArrivants
Précondition
0 <= uPos <= uSOMTailleListeA - 1
Renvoie
Objet CArc à la position uPos dans la liste des arcs entrants

Définition à la ligne 213 du fichier CSommet.cpp.

214 {
215 
216  //Entrée : uPos est un index hors limite de la liste des arcs arrivants
217  // => On lève une erreur
218  if (uPos > uSOMTailleListeA - 1 || uPos < 0) {
219  char sExceptionMessage[255];
220  sprintf_s(sExceptionMessage, 255, "CSommet::SOMLireListeA(unsigned int uPos) : Impossible de lire l'arc d'arrivee %d.\n", uPos);
221  throw CException(CSOMMET_Lecture_Impossible, sExceptionMessage);
222  }
223 
224  return pARCSOMListeArcsArrivants[uPos];
225 }

◆ SOMLireListeS()

CArc * CSommet::SOMLireListeS ( unsigned int  uPos)

Lis l'arc en position uPos de la liste pARCSOMListeArcsSortants.

Paramètres
uPosLa position de l'arc dans la liste pARCSOMListeArcsSortants
Précondition
0 <= uPos <= uSOMTailleListeS - 1
Renvoie
Objet CArc à la position uPos dans la liste des arcs sortants

Définition à la ligne 325 du fichier CSommet.cpp.

326 {
327  //Entrée : uPos est un index hors limite de la liste des arcs sortants
328  // => On lève une erreur
329  if (uPos > uSOMTailleListeS - 1 || uPos < 0) {
330  char sExceptionMessage[255];
331  sprintf_s(sExceptionMessage, 255, "CSommet::SOMLireListeS(unsigned int uPos) : Impossible de lire l'arc de sortie %d.\n", uPos);
332  throw CException(CSOMMET_Lecture_Impossible, sExceptionMessage);
333  }
334 
335  return pARCSOMListeArcsSortants[uPos];
336 }

◆ SOMRetirerArcArrivant()

void CSommet::SOMRetirerArcArrivant ( unsigned int  uDestination)

Retire un arc arrivant au sommet.

Paramètres
uDestinationLa destination de l'objet CArc à supprimer de la liste des arcs arrivants
Précondition
Il existe un objet CArc dans la liste des arcs arrivants ayant pour destination uDestination.

Définition à la ligne 147 du fichier CSommet.cpp.

147  {
148 
149  //Entrée : il existe bien la connexion de this vers uDestination
150  if (SOMChercherArcArrivant(uDestination) != -1) {
151 
152  CArc ** pARCNouvelleListe = (CArc **) malloc(sizeof(CArc *)*(uSOMTailleListeA - 1));
153 
154  //Erreur si allocation échouée
155  if (pARCNouvelleListe == NULL) {
156  throw(CException(CSOMMET_Alloc_Echouee, "CSommet::SOMRetirerArcArrivant(unsigned int uDestination) : Erreur d'allocation.\n"));
157  }
158 
159  //On parcourt tous les arcs
160  for (unsigned uBoucle = 0, uCounter = 0; uBoucle < uSOMTailleListeA; uBoucle++) {
161 
162  //Entrée : Nous ne sommes pas sur l'arc à supprimer
163  // => On copie dan l'arc dans le nouveau tableau
164  if (pARCSOMListeArcsArrivants[uBoucle]->ARCGetDestination() != uDestination) {
165  pARCNouvelleListe[uCounter] = pARCSOMListeArcsArrivants[uBoucle];
166  ++uCounter;
167  }
168  else {
169  delete pARCNouvelleListe[uCounter];
170  }
171  }
172 
173  //On supprime l'ancien tableau et on lui assigne le nouveau
175  pARCSOMListeArcsArrivants = pARCNouvelleListe;
176 
177 
179  }
180 }

◆ SOMRetirerArcSortant()

void CSommet::SOMRetirerArcSortant ( unsigned int  uDestination)

Retire un arc sortant au sommet.

Paramètres
uDestinationLa destination de l'objet CArc à supprimer de la liste des arcs sortants
Précondition
Il existe un objet CArc dans la liste des arcs sortants ayant pour destination uDestination.

Définition à la ligne 261 du fichier CSommet.cpp.

262 {
263  //Entrée : il existe bien la connexion de this vers uDestination
264  if (SOMChercherArcSortant(uDestination) != -1) {
265 
266 
267  CArc ** pARCNouvelleListe = (CArc **) malloc(sizeof(CArc *)*(uSOMTailleListeS - 1));
268 
269  //Erreur si allocation échouée
270  if (pARCNouvelleListe == NULL) {
271  throw(CException(CSOMMET_Alloc_Echouee, "CSommet::SOMRetirerArcSortant(unsigned int uDestination) : Erreur d'allocation.\n"));
272  }
273 
274  //On parcourt tous les arcs
275  for (unsigned uBoucle = 0, uCounter = 0; uBoucle < uSOMTailleListeS; uBoucle++) {
276 
277  //Entrée : Nous ne sommes pas sur l'arc à supprimer
278  // => On copie dan l'arc dans le nouveau tableau
279  if (pARCSOMListeArcsSortants[uBoucle]->ARCGetDestination() != uDestination) {
280  pARCNouvelleListe[uCounter] = pARCSOMListeArcsSortants[uBoucle];
281  ++uCounter;
282  }
283  else {
284  delete pARCNouvelleListe[uCounter];
285  }
286  }
287 
288  //On supprime l'ancien tableau et on lui assigne le nouveau
290  pARCSOMListeArcsSortants = pARCNouvelleListe;
291 
293  }
294 }

Documentation des données membres

◆ pARCSOMListeArcsArrivants

CArc** CSommet::pARCSOMListeArcsArrivants
private

La liste des arcs arrivants au sommet.

Définition à la ligne 32 du fichier CSommet.h.

◆ pARCSOMListeArcsSortants

CArc** CSommet::pARCSOMListeArcsSortants
private

La liste des arcs partants du sommet.

Définition à la ligne 34 du fichier CSommet.h.

◆ uSOMId

unsigned int CSommet::uSOMId
private

Le numéroe du sommet.

Définition à la ligne 31 du fichier CSommet.h.

◆ uSOMTailleListeA

unsigned int CSommet::uSOMTailleListeA
private

Le nombre d'arcs arrivants au sommet.

Définition à la ligne 33 du fichier CSommet.h.

◆ uSOMTailleListeS

unsigned int CSommet::uSOMTailleListeS
private

Le nombre d'arcs partants du sommet.

Définition à la ligne 35 du fichier CSommet.h.


La documentation de cette classe a été générée à partir du fichier suivant :
CSommet::SOMChercherArcArrivant
int SOMChercherArcArrivant(unsigned int uSOMIdDestination)
Definition: CSommet.cpp:189
CSommet::SOMGetId
unsigned int SOMGetId()
Definition: CSommet.cpp:89
CArc::ARCGetDestination
unsigned int ARCGetDestination(void)
Definition: CArc.cpp:58
CSommet::SOMChercherArcSortant
int SOMChercherArcSortant(unsigned int uSOMIdDestination)
Definition: CSommet.cpp:303
CArc
Classe des arcs d'un sommet.
Definition: CArc.h:20
CException
Classe d'exception personnalisée.
Definition: CException.h:25
CSommet::uSOMTailleListeA
unsigned int uSOMTailleListeA
Definition: CSommet.h:33
CSommet::uSOMId
unsigned int uSOMId
Definition: CSommet.h:31
CSommet::pARCSOMListeArcsArrivants
CArc ** pARCSOMListeArcsArrivants
Definition: CSommet.h:32
CSommet::uSOMTailleListeS
unsigned int uSOMTailleListeS
Definition: CSommet.h:35
CSommet::pARCSOMListeArcsSortants
CArc ** pARCSOMListeArcsSortants
Definition: CSommet.h:34