1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
|
int colorie_zone_rec(int ** mat,int i,int j,int cpt,int cl,Grille *grille){
// On accède à la case (i, j) avant...
int aux=mat[i][j];
// ...de vérifier que les indices sont valides !
// Les tests du type "(i || j ) < 0" ont de toute manière peu de chance de fonctionner.
if(((i || j ) <0 ) || ((i || j ) > (grille->nbcase) ) || (!mat[i][j]))
return 0;
else {
// On change le contenu.
mat[i][j]=cl;
// Et on continue à le faire mais de manière différente ?
Grille_chg_case(grille,i,j,mat[i][j]);
// La répétition est source de tous le maux...
if(aux==mat[i-1][j]){
cpt+=colorie_zone_rec(mat,i-1,j,cpt,cl,grille);
}
if(aux==mat[i+1][j]){
cpt+=colorie_zone_rec(mat,i+1,j,cpt,cl,grille);
}
if(aux==mat[i][j+1]){
cpt+=colorie_zone_rec(mat,i,i+1,cpt,cl,grille); // Celui-là par exemple (j+1).
}
if(mat[i][j]==mat[i][j-1]){
cpt+=colorie_zone_rec(mat,i,j-1,cpt,cl,grille);
}
}
// Y a un truc pas clair avec ce compteur à la fois paramètre et valeur de retour.
return cpt;
} |
Partager