Propagation
Objectif : sélectionner les cases d’un tableau possédant les mêmes caractéristiques par propagation à partir une case.
Ce type d’algorithme est par exemple utilisé au sein du jeu de démineur, ou bien par les logiciel de dessin pour l’outil « baguette magique ».
Pour cet exercice, on représentera la grille par un tableau (liste de listes en Python) contenant des entiers.
Une case « sélectionnée » aura pour valeur -1, et sera représentée par le caractère "█" (full block) et pour plus de visibilité, une case de valeur nulle sera représentée par le caractère " " (espace). Toutes les autres cases auront pour valeur un entier à un seul chiffre.
construire_grille qui prend en argument les dimensions w (largeur) et h (hauteur) et renvoie un tableau (une liste de listes) dont toutes les cases contiennent la valeur 0 par défaut.
peupler_grille, qui prend en argument un tableau (créé avec construire_grille) et un entier v donnant la valeur à placer dans la grille (v peut signifier le code ascii d’un caractère par exemple) et un entier n désignant le nombre d’occurrences de ce nombre à placer dans la grille. Les n entiers v sont placés aléatoirement dans la grille.
afficher_grille, qui prend en argument un tableau (créé avec construire_grille et peuplé avec peupler_grille), qui affiche le tableau dans la console de sorte que lignes et colonnes soient correctement alignées et réparties.
propager, qui prend en argument un tableau et un tuple depart désignant une de ses cases (au format (ligne, colonne)) et renvoie la liste des cases, adjacentes à la case de départ, possédant la même valeur que cette dernière. La propagation se fait exclusivement par les cotés adjacents à la case (gauche, droite, haut et bas), et non par les diagonales.
Grille.
