defpropager(M,i,j,val):ifM[i][j]==1:#(1)M[i][j]=val# l'element en haut fait partie de la composanteifi-1>=0andM[i-1][j]==1:#(2)propager(M,i-1,j,val)# l'element en bas fait partie de la composanteifi+1<len(M)andM[i+1][j]==1:#(3)propager(M,i+1,j,val)# l'element à gauche fait partie de la composanteifj-1>=0andM[i][j-1]==1:propager(M,i,j-1,val)# l'element à droite fait partie de la composanteifj+1<len(M[i])andM[i][j+1]:propager(M,i,j+1,val)
La propagation n'a lieu que si le pixel vaut 1 (sinon elle s'arrête)
On relance la propagation à partir de la case voisine si celle-ci est est dans la grille (première partie de la condition) et aussi dans la même composante (seconde partie de la condition)
Attention
Dans le code fourni les lignes 5 à 15 ne sont pas indentées, elles sont donc exécutées même si M[i][j] != 1ce qui donne des résultats faux !
Commentaires
tab[i+1]==tab[i]+1
permet de tester que deux éléments consécutifs de la liste sont deux entiers qui se suivent.