====== 2021 - Sujet 25 - Exercice 2 ====== Soit une image binaire représentée dans un tableau à 2 dimensions. Les éléments ''%%M[i][j]%%'', appelés pixels, sont égaux soit à ''0'' soit à ''1''. Une composante d'une image est un sous-ensemble de l'image constitué uniquement de ''1'' et de ''0'' qui sont côte à côte, soit horizontalement soit verticalement. On souhaite, à partir d'un pixel égal à ''1'' dans une image ''M'', donner la valeur ''val'' à tous les pixels de la composante à laquelle appartient ce pixel. La fonction propager prend pour paramètre une image ''M'', deux entiers ''i'' et ''j'' et une valeur entière ''val''. Elle met à la valeur ''val'' tous les pixels de la composante du pixel ''M[i][j]'' s'il vaut ''1'' et ne fait rien s'il vaut ''0''. Par exemple, l'image ''M'' étant donnée à gauche, on représente à droite le résultat de ''propager(M,2,1,3)'' 0 0 1 0 0 0 1 0 0 1 0 1 0 3 0 1 1 1 1 0 3 3 3 0 0 1 1 0 0 3 3 0 Compléter le code récursif de la fonction propager donné ci-dessous def propager(M, i, j, val): if M[i][j]== ...: return M[i][j]=val # l'élément en haut fait partie de la composante if ((i-1) >= 0 and M[i-1][j] == ...): propager(M, i-1, j, val) # l'élément en bas fait partie de la composante if ((...) < len(M) and M[i+1][j] == 1): propager(M, ..., j, val) # l'élément à gauche fait partie de la composante if ((...) >= 0 and M[i][j-1] == 1): propager(M, i, ..., val) # l'élément à droite fait partie de la composante if ((...) < len(M) and M[i][j+1] == 1): propager(M, i, ..., val) Exemple : >>> M = [[0,0,1,0],[0,1,0,1],[1,1,1,0],[0,1,1,0]] >>> propager(M,2,1,3) >>> M [[0, 0, 1, 0], [0, 3, 0, 1], [3, 3, 3, 0], [0, 3, 3, 0]] Cas pas envisagé par le sujet d'origine : que se passerait-il si on appelait ''propager(M, 2, 1, 1)'' ?