Si les points sont les points en rose ci-dessous, le résultat est celui représenté par la figure ; votre programme n'effectuera pas de représentation graphique, il suffira de faire afficher la liste des arêtes.
L'algorithme utilisé sera l'algorithme de Kruskal.
On utilisera des fichiers de données. Un tel fichier contient une ligne par sommet ; sur chaque ligne, il y a le numéro du sommet, puis son abscisse, puis son ordonnée. Les fichiers de données points1.txt et points2.txt pourront servir à l'exécution du programme. Le fichier points1.txt correspond au dessin ci-dessus. Pour le fichier points1.txt, le programme pourrait écrire sur la sortie standard :
Aretes de l'arbre couvrant de poids minimum : 6, 7 1, 3 3, 7 5, 6 4, 7 2, 6
On définira plusieurs classes dans un paquetage nommé kruskal :
public void lireFichier(String nom) throws IOException { File fichier = new File(nom); Scanner lecteur = new Scanner(fichier); while(lecteur.hasNextInt()) { sommets.add(new Sommet(lecteur.nextInt(), lecteur.nextInt(), lecteur.nextInt())); } }Toute méthode qui utilisera une méthode qui utilisera une méthode... qui utilisera la méthode lireFichier indiquera dans son en-tête throws IOException comme ci-dessus. Cela est lié au mécanisme des exceptions que vous ne verrez peut-être que plus tard.
L'algorithme de Kruskal nécessite de trier les arêtes du graphe par poids croissants ; il pourra être utile de faire en sorte que la classe Arete implémente l'interface java.lang.Comparable<Arete> pour utiliser une méthode statique sort de la classe java.util.Collections.
Une méthode main prendra en paramètre le nom d'un fichier de points et fera en sorte que la liste des arêtes d'un arbre couvrant de poids minimum sur ces points soit affichée à l'écran.
Le fichier points2.txt correspond au dessin ci-dessous.