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 : 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 ArrayBasedGraph.

Et pour dessiner un graphe?

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

...

}

Elle fournit les méthodes méthodes suivantes: