Comme les listes, les piles, et les files, il est important de distinguer le type abstrait de représentation des données, du type implémenté dans le langage.
En Python il n'existe pas de type GRAPHE prédéfini. C'est donc à chacun de l'implémenter avec les outils disponibles dans le langage.
Comme pour les listes il peut exister, selon les auteurs, des différences sur le nombre et la définition des primitives de bases. Nous allons utiliser ici ce jeu de primitives :
- creerGrapheVide() : retourne un graphe vide
- estVideGraphe(G) : retourne True si G est un graphe vide
- ajouterSommet(G,s) : retourne le graphe après ajout du sommet s
- supprimerSommet(G,s) : retourne le graphe après suppression du sommet s (et tout les arcs rliés à s)
- existeSommet(G,s) : retourne True si s est un sommet du graphe G
- Pour un graphe orienté :
- ajouterArc(G,sd,sa) : retourne le graphe après ajout d'un arc reliant sd à sa (orienté)
- supprimerArc(G,sd,sa) : retourne le graphe après suppression de l'arc sd->sa
- existeArc(G,sd,sa) : retourne True si sd->sa est un arc du graphe G
- Pour un graphe non orienté :
- ajouterArete(G,sd,sa) : retourne le graphe après ajout d'une arête reliant sd à sa (non-orienté)
- supprimerArete(G,sd,sa) : retourne le graphe après suppression de l'arête sd->sa
- existeArete(G,sd,sa) : retourne True si sd->sa est une arête du graphe G
Une première implémentation (d'un graphe orienté) avec un dictionnaire
Comme nous l'avons vu, un graphe peut être représenté par une liste de successeur. Cette représentation peut être implémentée efficacement avec un dictionnaire. Chaque sommet sera donc une clé dictionnaire, et sa valeur sera la liste des sommets sa reliés à s dans le sens s -> sa.
En conséquence, un graphe vide est un dictionnaire vide.