Warning: Undefined array key 2 in /home/goupillf/wiki.goupill.fr/lib/plugins/codeprettify/syntax/code.php on line 214
Warning: Undefined array key 2 in /home/goupillf/wiki.goupill.fr/lib/plugins/codeprettify/syntax/code.php on line 214
Warning: Undefined array key 2 in /home/goupillf/wiki.goupill.fr/lib/plugins/codeprettify/syntax/code.php on line 214
Warning: Undefined array key 2 in /home/goupillf/wiki.goupill.fr/lib/plugins/codeprettify/syntax/code.php on line 214
Warning: Undefined array key 2 in /home/goupillf/wiki.goupill.fr/lib/plugins/codeprettify/syntax/code.php on line 214
Warning: Undefined array key 2 in /home/goupillf/wiki.goupill.fr/lib/plugins/codeprettify/syntax/code.php on line 214
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) ?
