Vous êtes sur la page 1sur 5

Les graphes en C Mr Benabderrezak

C’est quoi un graphe ?

- Un graphe est une structure de données qui représente un ensemble d’objets reliés entre eux par des liens.
- Les objets sont appelés des sommets ou des nœuds, et les liens sont appelés des arêtes ou des branches.
- Il existe différents types de graphes, selon la nature et la direction des liens, comme les graphes orientés, les graphes non orientés, les
graphes pondérés, etc.

L’implémentation des graphes en langage C

- Pour implémenter un graphe en langage C, il existe plusieurs méthodes, comme les matrices d’adjacence, les listes d’adjacence, ou les listes
de successeurs.
- Chaque méthode a ses avantages et ses inconvénients, selon le nombre de sommets, le nombre d’arêtes, et les opérations à effectuer sur le
graphe.
- Voici un exemple de code en langage C qui implémente un graphe orienté à l’aide d’une liste d’adjacence :

1
Les graphes en C Mr Benabderrezak

// Définition d'une structure pour représenter un nœud de la liste d'adjacence


struct AdjListNode {
int dest; // Le sommet de destination de l'arête
struct AdjListNode* next; // Le pointeur vers le prochain nœud de la liste
};
// Définition d'une structure pour représenter une liste d'adjacence
struct AdjList {
struct AdjListNode* head; // Le pointeur vers la tête de la liste
};
// Définition d'une structure pour représenter un graphe
struct Graph {
int V; // Le nombre de sommets du graphe
struct AdjList* array; // Le tableau des listes d'adjacence
};
// Fonction pour créer un nouveau nœud de la liste d'adjacence
struct AdjListNode* newAdjListNode(int dest) {
// On alloue de la mémoire pour le nouveau nœud
struct AdjListNode* newNode = (struct AdjListNode*) malloc(sizeof(struct AdjListNode));
newNode->dest = dest; // On affecte la valeur du paramètre dest au champ dest du nœud
newNode->next = NULL; // On initialise le champ next du nœud à NULL
return newNode; // On retourne le pointeur vers le nouveau nœud
}
// Fonction pour créer un graphe avec V sommets

2
Les graphes en C Mr Benabderrezak

struct Graph* createGraph(int V) {


struct Graph* graph = (struct Graph*) malloc(sizeof(struct Graph)); // On alloue de la mémoire pour le graphe
graph->V = V; // On affecte la valeur du paramètre V au champ V du graphe
graph->array = (struct AdjList*) malloc(V * sizeof(struct AdjList)); // On alloue de la mémoire pour le tableau des listes d'adjacence
for (int i = 0; i < V; i++) {
graph->array[i].head = NULL; // On initialise la tête de chaque liste d'adjacence à NULL
}
return graph; // On retourne le pointeur vers le graphe
}

// Fonction pour ajouter une arête au graphe


void addEdge(struct Graph* graph, int src, int dest) {
// On crée un nouveau nœud pour l'arête src -> dest et on l'ajoute à la liste d'adjacence de src
struct AdjListNode* newNode = newAdjListNode(dest); // On appelle la fonction newAdjListNode avec le paramètre dest
newNode->next = graph->array[src].head; // On fait pointer le champ next du nouveau nœud vers la tête de la liste d'adjacence de src
graph->array[src].head = newNode; // On fait pointer la tête de la liste d'adjacence de src vers le nouveau nœud
}
// Fonction pour afficher le graphe
void printGraph(struct Graph* graph) {
for (int i = 0; i < graph->V; i++) { // On parcourt tous les sommets du graphe
struct AdjListNode* node = graph->array[i].head; // On initialise un pointeur vers la tête de la liste d'adjacence du sommet i
printf("(%d", i); // On affiche le sommet i entre parenthèses
while (node != NULL) { // On parcourt la liste d'adjacence du sommet i

3
Les graphes en C Mr Benabderrezak

printf(" —> %d", node->dest); // On affiche le sommet de destination de chaque arête


node = node->next; // On avance le pointeur vers le prochain nœud de la liste
}
printf(")\n"); // On termine la ligne par une parenthèse fermante et un saut de ligne
}
}
int main() {
// On crée un graphe avec 5 sommets
struct Graph* graph = createGraph(5); // On appelle la fonction createGraph avec le paramètre 5
// On ajoute des arêtes au graphe
addEdge(graph, 0, 1); // On appelle la fonction addEdge avec les paramètres 0 et 1
addEdge(graph, 1, 2); // On appelle la fonction addEdge avec les paramètres 1 et 2
addEdge(graph, 2, 1); // On appelle la fonction addEdge avec les paramètres 2 et 1
addEdge(graph, 2, 0);
addEdge(graph, 3, 2);
addEdge(graph, 4, 5);

// On affiche le graphe
printGraph(graph);
return 0;
}

4
Les graphes en C Mr Benabderrezak

Vous aimerez peut-être aussi