#ifndef PLUGIN_ALGO_GROUPES_H
#define PLUGIN_ALGO_GROUPES_H

extern int plugin_algo_groupes(unsigned long total_cellules,
                               unsigned long total_liens,
                               cell * tabcell,
                               char *params,
                               unsigned long
                               nb_option_force_link,
                               struct cell_option_force_link
                               *tab_option_force_link,
                               char *buffer_erreur, int maxlen_erreur);

#endif
/* PLUGIN_ALGO_GROUPES_H */

/*

| (1) Pour chaque cellule qui a un lien forcé (a) :
|     {
|       si elle ne fait pas partie d'un groupe
|       - si sa cellule opposée (b) fait partie d'un groupe
|         => mettre (a) dans le groupe de (b)
|       - sinon créer un groupe avec (a) et (b) dedans
|     }
|
| (2) Créer un tableau contenant toutes les cellules qui ne
|     sont *pas* dans un groupe
|
|     Tant qu'il y a des cellules dans ce tableau :
|     {
|         Prendre une cellule au hasard (a)
|         Tirer un lien (en fonction de la pondération)
|         - Si cellule opposée (b) fait partie d'un groupe
|           => mettre (a) dans le groupe de (b)
|         - sinon
|           => créer un groupe contenant (a) et (b)
|     }
|
| (3) Traitement des groupes :
|
|     Tant que total_groupes > 1
|     {
|         Prendre un groupe au hasard
|         Pour chaque cellule (a) du groupe :
|         {
|             Pour les liens à faire :
|             - si cellule opposée fait partie
|               du même groupe
|               => poser un mur
|             - sinon
|               => joindre les deux groupes
|         }
|     }
|
|     Comme il ne reste qu'un groupe :
|     parcourir toutes les cellules et
|     pour tous les liens à faire, les
|     transformer en murs.
*/
