morissardj's Home Page

Home
Langage C

Langage C - Les graphes - forme matricielle


Deux types de structures de données sont nécessaires pour traiter de façon agréable le problème : les graphes, qui sont une représentation instinctive et mathématique des réseaux considérés, et les files, qui organisent les éléments d'un ensemble muni d'une relation d'ordre et qui permettront de comparer rapidement les longueurs d'un ensemble de chemins.  

Définition mathématique

Un graphe est la donnée d'un quadruplé {S,A,X,F} avec:

Schématiquement, voici une représentation classique d'un graphe :




Représentation matricielle

On définit un graphe comme sa matrice des transitions (en convenant d'un symbole, dans notre cas 0, lorsque l'arête n'existe pas).
Les calculs à effectuer sur le graphe sont alors extrêmement simples : (i,j) est le poids de l'arête qui relie le sommet i au sommet j. L'inconvénient majeur de ce type de structure de données, c'est qu'elle tient une place mémoire considérable. En fait, pour coder un graphe avec O(n) de données, on utilise une place mémoire en O(n2) puisqu'on est obligé de coder toutes les arêtes, qu'elles existent ou non, une matrice est par définition statique, la taille étant fixée une bonne fois pour toutes à l'initialisation.

L'implémentation proposée alloue en fait  O(n2)*2 car je créé une matrice avec les points des arêtes  dans un tableau et dans l'autre un bouleen qui va dire si oui ou non l'arête existe.
 
source

Graphe_matrice.h

Graphe_matrice.c

Main.c