Étant donné un réseau et un noeud racine sélectionné, il est très facile de construire un arbre couvrant de manière distribuée. Le noeud de départ envoie un message à tous ses voisins. Puis l'algorithme est comme suit : si un noeud qui n'est pas encore dans l'arbre reçoit un message, il choisit l'émetteur de ce message comme parent, puis envoie à son tour un message à ses voisins. Cette propagation va ainsi définir un arbre qui couvre tous les noeuds du réseau (illustration ci-dessous).
Construction d'un arbre couvrant dans un réseau.
Copier l'algorithme de broadcast vu précédemment dans une nouvelle classe TreeNodeV1
. Pour chaque question, nous vous conseillons de créer une nouvelle version de votre fichier.
parent
de type Node
pour mémoriser le noeud parent. getCommonLinkWith()
pour obtenir le lien qui vous relie à lui, et la méthode setWidth()
sur ce dernier pour mettre l'arête en gras.children
de type ArrayList
. Vous pouvez utiliser des messages de différents types en utilisant des flags (voir un exemple d'utilisation dans l'exercice 3 de la feuille de td). Il est aussi possible d'envoyer un message à un seul noeud voisin plutôt qu'à tous en utilisant la bonne méthode.getTime()
pour connaître le numéro de ronde actuelle. Vous pouvez surcharger onClock()
pour exécuter un code spécifique à chaque ronde (la méthode sera appelée juste après la réception des messages envoyés à la ronde précédente).