1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49
|
Pour chaque hexagone Hex_i dont on change la couleur
Récupérer son ancienne région courante OldRegHex_i
Retirer Hex_i de OldRegHex_i
Pour tout les voisins direct VoiHexi_j de Hex_i
Si la région de VoiHexi_j et la même que OldRegHex_i // (autrement dit le voisin direct courant de hex_i était dans la même région que Hex_i)
Ajouter VoiHexi_j dans une liste temporaire Lvoisins_Hex_i_old des voisins de Hex_i appartenant à son ancienne région courante
Sinon
Ajouter VoiHexi_j dans une liste temporaire Lvoisins_Hex_i des voisins de Hex_i n'appartenant pas à son ancienne région courante
Fin si
Fin pour
// on teste si l'ancienne region de Hex_i c'est scindé avec son retrait de cette dernière (noeud séparateur) et on créer la (les) nouvelle(s) region(s) au besoin
Pour chaque hexagone Hex_Voi_k de la liste Lvoisins_Hex_i_old
Pour chaque hexagone restant Hex_Voi_l de la liste Lvoisins_Hex_i_old
Si il n'y a pas un chemin élémentaire entre Hex_Voi_k et Hex_Voi_l parmi le sous graphe formé des hexagones de OldRegHex_i // les deux hexagones sont désormais séparés
Parcourir les voisins récursif Hex_Liee_k de Hex_Voi_k et Hex_Liee_l de Hex_Voi_l et appartenant à OldRegHex_i et les stocker dans les listes temporaires respective des nouvelles composante connexe Lcc_k et Lcc_l
Si Hex_Liee_k appartient à Lvoisins_Hex_i_old
Retirer Hex_Liee_k de Lvoisins_Hex_i_old
Si Hex_Liee_l appartient à Lvoisins_Hex_i_old
Retirer Hex_Liee_l de Lvoisins_Hex_i_old
Fin parcours
// on regarde lequel des deux hexagone séparer de l'autre fait partie de la plus grande nouvelle composante connexe (region in fine) créée
Si |Lcc_k| > |Lcc_l|
Retirer les hexagones de Lcc_l de OldRegHex_i
Créer une nouvelle region NewRegHex_l équivalente à Lcc_l
Sinon
Retirer les hexagones de Lcc_k de OldRegHex_i
Créer une nouvelle region NewRegHex_k équivalente à Lcc_k
Hex_Voi_k = Hex_Voi_l
Break // On arrête les test de connectivité pour Hex_Voi_k dans la liste restante Lvoisins_Hex_i_old, Hex_Voi_k atant sortie de OldRegHex_i, on passe directement a Hex_Voi_l
Fin si
Fin si
Fin pour
Fin pour
// regarder si Hex_i peut s'integrer dans une région existante en consultant les voisins de Lvoisins_Hex_i dont la couleur de resion serai la même que sa nouvelle couler
Pour chaque hexagone Hexi_n de Lvoisins_Hex_i
Si la couleur de Hexi_n est égale à la nouvelle couleur de Hex_i
Ajouter Hex_i à la région de Hexi_n
Break
Fin si
Fin pour
// sinon Hex_i forme une nouvelle region
Si la region de Hex_i est NULL // precedentes étape infructueuse
Créer une nouvelle region avec/pour Hex_i
Fin si
Fin pour |
Partager