0. Ce qu'il faut savoir sur les graphes et leur implementation en Jcg

Un graphe est donné par un ensemble de sommets V et une collection E d'arêtes (paires de sommets de V). De manière intuitive, un graphe décrit les connections ou relations d'adjacences entre objets de l'ensemble V. 


Figure 1 : (Gauche) Exemple de représentation d'un graphe à l'aide de listes d'adjacence. (Droite) Exemple de représentation utilisant la matrice d'adjacence.

Dans ce TD nous considérons des graphes qui sont censés etre planaires (et pour la plupart triangulés): néanmoins, l'implementation fournie par Jcg permet de représenter des graphes généraux, non orientés.

Implementation d'un graphe en Jcg

En ce qui concerne la représentation d'un graphe, il est à remarquer qu'il en existe de nombreuses: nous allons considérer ici juste une représentation, celle basée sur une matrice d'adjacence: c'est fait par la classe AdjacencyGraph.
En tant que structure de données abstraite, Jcg fournit l'interface Graph qui met à disposition un certain nombre de méthodes pour la manipulation dàun graphe, ainsi que des primitives pour l'accès aux incidences sommets/aretes.
On vous conseille de jeter un coup d'oeuil à la doc de Jcg, mais en gros on a les méthodes suivantes:



bien sur, ces méthodes sont implementées par la classe AdjacencyGraph.

Et pour dessiner un graphe?

La librairie met aussi à disposition une classe abstraite, GraphDrawing, qui définit les méthodes nécéssaire pour le calcul et la visualisation de graphes en 2D et 3D.
Attention: la classe GraphDrawing est générique, et parametrée par le type des points qu'on va manipuler: Point_2 ou Point_3 selon les cas.
 public abstract class GraphDrawing<X extends Point_> {

...

}

Elle fournit les méthodes méthodes suivantes: