entier [][] fonction matriceDesDistances(-> entier px, -> entier py, -> entier nl, -> entier nc) entier [nl][nc] md entier i entier j pour i de 0 à nl-1 faire pour j de 0 à nc-1 faire md[i][j] <- abs(i-py)+abs(j-px) fait fait retourner md fin fonction booleen fonction voisin(-> entier x, -> entier y, -> entier [][] md, -> entier distance) booleen res <- faux si ( x >= 0 ) et ( x < longueur(2,md) ) et ( y >= 0 ) et ( y < longueur(1,md) ) alors si md[y][x] == distance alors res <- vrai fsi fsi retourner res fin fonction booleen fonction voisinage(-> entier c, -> entier l, -> entier [][] md, -> entier distance, -> booleen [][] t, -> booleen v) booleen res <- faux si ( md[l][c] == -1 ) et ( t[l][c] == v ) alors si voisin(c+1,l,md,distance) alors res <- vrai sinon si voisin(c-1,l,md,distance) alors res <- vrai sinon si voisin(c,l+1,md,distance) alors res <- vrai sinon si voisin(c,l-1,md,distance) alors res <- vrai fsi fsi fsi fsi fsi retourner res fin fonction entier [][] fonction distances(-> entier px, -> entier py, -> booleen [][] t) entier i entier j entier l entier c booleen change entier distance <- 0 entier nl -> longueur(1,t) entier nc -> longueur(2,t) entier [nl][nc] md pour i de 0 à nl-1 faire pour j de 0 à nc-1 faire md[i][j] <- -1 fait fait md[py][px] <- 0 faire change <- faux pour l de 0 à nl-1 faire pour c de 0 à nc-1 faire si voisinage(c,l,md,distance,t,t[py][px]) alors change <- vrai md[l][c] <- distance+1 fsi fait fait distance <- distance+1 tant que (change) retourner md fin fonction