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 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143
|
#include "Graphes.h"
#include "Sommets.h"
#include "Aretes.h"
#include "stdafx.h"
Graphes::Graphes() {
num++;
nom_graphe="G"+num;
}
Graphes::Graphes(string p_nom,vector<Sommets*> p_sommets,vector<Aretes*> p_aretes){
nom_graphe=p_nom;
sommets=p_sommets;
aretes=p_aretes;
}
string Graphes::listeSommets(){
if (sommets.size()==0){
return "aucun sommet";
}else{
string ret="";
for (int i=0;i<sommets.size();i++){
ret+=sommets.at(i)->toString()+"\n";
}
return ret;
}
}
string Graphes::listeAretes(){
if (aretes.size()==0){
return "aucune arêtes";
}else{
string ret="";
for (int i=0;i<aretes.size();i++){
ret+=aretes.at(i)->toString()+"\n";
}
return ret;
}
}
void Graphes::createSommet(){
Sommets* s=new Sommets();
addSommet(s);
}
void Graphes::createArete(Sommets* p_somm1,Sommets* p_somm2){
Aretes* a=new Aretes();
addArete(a,p_somm1,p_somm2);
}
void Graphes::addArete(Aretes* p_arete,Sommets* p_somm1,Sommets* p_somm2){
if (p_arete->getArete_dans()==NULL){
p_arete->setArete_dans(this);
}
p_arete->setSommets(p_somm1, p_somm2);
p_somm1->setSommet_dans(this);
p_somm2->setSommet_dans(this);
p_somm1->addArete(p_arete);
p_somm2->addArete(p_arete);
//on ajoute l'arête dans le graphe
aretes.push_back(p_arete);
//on ajoute les sommets dans le graphe
sommets.push_back(p_somm1);
sommets.push_back(p_somm2);
}
void Graphes::addSommet(Sommets* p_sommets,Aretes* p_aret) {
if (p_sommets->getSommet_dans()==NULL){
p_sommets->setSommet_dans(this);
}
p_sommets->addArete(p_aret);
sommets.push_back(p_sommets);
}
void Graphes::addSommet(Sommets* p_sommets) {
if (p_sommets->getSommet_dans()==NULL){
p_sommets->setSommet_dans(this);
}
sommets.push_back(p_sommets);
}
Aretes* Graphes::deleteArete(Aretes* p_arete){
int rech=rechercheArete(p_arete);
if (rech!=-1){
aretes.erase(aretes.begin()+rech);
//l'arête ne référence plus le graphe
p_arete->setArete_dans(NULL);
//l'arête ne référence plus ses deux sommets
p_arete->setSommets(NULL, NULL);
return p_arete;
}else{
return NULL;
}
}
int Graphes::rechercheArete(Aretes* p_arete){
int i=0;
while (i<aretes.size() && strcmp(aretes.at(i)->nom_arete.c_str(),p_arete->nom_arete.c_str())!=0){
i++;
}
if (i<aretes.size()){
return i;
}else{
return -1;
}
}
Sommets* Graphes::deleteSommet(Sommets* p_sommet){
int rech=rechercheSommet(p_sommet);
if (rech!=-1){
sommets.erase(sommets.begin()+rech);
p_sommet->setSommet_dans(NULL);
//le sommet ne référence plus le graphe
//il faut maintenant supprimer toutes les aretes incidentes
//du graphe
vector<Aretes*>::iterator i = p_sommet->aret_incidents.begin();
while (i!=p_sommet->aret_incidents.end()){
deleteArete(*i);
i++;
}
return p_sommet;
}else{
return NULL;
}
}
int Graphes::rechercheSommet(Sommets* p_sommet){
int i=0;
while (i<sommets.size() && strcmp(sommets.at(i)->nom_sommet.c_str(),p_sommet->nom_sommet.c_str())!=0){
i++;
}
if (i<sommets.size()){
return i;
}else{
return -1;
}
}
Graphes::~Graphes() {
// TODO Auto-generated destructor stub
} |
Partager