0% ont trouvé ce document utile (0 vote)
16 vues3 pages

Graph

Transféré par

Mega NasS
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
16 vues3 pages

Graph

Transféré par

Mega NasS
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

#include <iostream>

#include <stdio.h>
#include <stdlib.h>

using namespace std;


typedef struct nodeElement nodeElement;
typedef struct arcElement
{
nodeElement *sommet;
struct arcElement *suivant;
}*arc , arcElement;

typedef struct nodeElement


{
int val_sommet;
arcElement *voisin = NULL;
struct nodeElement *next;
}*node, nodeElement;

node head = NULL;

node new_node();
bool isEmpty(node n);
void insert(int value);
void insert_arc(int sommet_1, int sommet_2);
node search(int sommet);
void display_node(node n);
node clear(node n);

int main(){

insert(3); // permet d'inserer des elements


insert(6);
insert(4);
insert(2);
insert(7);
insert(9);
display_node(head); // permet d'efficher les elements

insert_arc(3,6);

head = clear(head); // permet de vider le graphe


display_node(head); // permet d'efficher les elements

}
/************************************************************************
*******************/
// Fonction pour creer un node vide
node new_node(){
return NULL;
}
/************************************************************************
*******************/
// Fonction pour tester si le node est vide ou pas
bool isEmpty(node n){
return n == NULL;
}
/************************************************************************
*******************/
// Fonction pour inserer des elements(node)
void insert(int value){
node ptr = (node) malloc(sizeof(node*)); // Allocation memoire
node ptr1;
if(isEmpty(ptr)) // Test pour voir si l'allocation s'est bien passée
{
cout<<"Erreur lors de l'allocation\n";
return;
}
ptr->val_sommet = value; // initialisation du node
ptr->next = NULL;
if(isEmpty(head)) // on verifie si le node head n'est pas vide
head = ptr; // si il est vide alors le node qui est creer sera le
premier element du graphe
else{ // sinon on cherche le dernier element du graphe et on y ajoute
le node
ptr1 = head;
while(ptr1->next != NULL)
ptr1 = ptr1->next;
ptr1->next = ptr;
}
}
/************************************************************************
*******************/
// Fonction pour inserer un arc ou une arrete
void insert_arc(int sommet_1, int sommet_2){
node ptr = search(sommet_1); // on cherche le sommet 1 d'abord
node ptr1;
if(ptr){ // si le sommet 1 existe alors on cherche le sommet 2...car
un arc est formé par un ou plusieurs sommets
ptr1 = search(sommet_2);
if(ptr1){ // si le sommet 2 existe alors on creer l'arc entre le
sommet 1 et 2
arc arrete = (arc) malloc(sizeof(arc));
arrete->sommet = ptr;
arrete->suivant = ptr1->voisin;
ptr1->voisin = arrete;
}
}
}
/************************************************************************
*******************/
// Fonction de recherche
node search(int sommet){
while(head){
if(head->val_sommet == sommet){
break;
}
head = head->next;
}
return head;
}
/************************************************************************
*******************/
// Fonction d'affichage
void display_node(node n){
if(isEmpty(n)){
cout<<"Le graph es vide\n";
return;
}
cout<<n->val_sommet<<"\t";
display_node(n->next);
}
/************************************************************************
*******************/
/* Fonction de liberation de la memoire car on a eu a faire de
l'allocation dynamique,
donc il faut liberer la memoiren en supprimant tout les elements creer*/
node clear(node n){
node ptr = NULL;
while(n){
ptr = n->next;
free(n);
n = ptr;
}
return n;
}

Vous aimerez peut-être aussi