Récupérer le nombre de valeurs identiques adjacentes dans un tableau

cs_Pekele Messages postés 4 Date d'inscription mercredi 22 janvier 2003 Statut Membre Dernière intervention 30 octobre 2005 - 29 oct. 2005 à 16:28
cs_Pekele Messages postés 4 Date d'inscription mercredi 22 janvier 2003 Statut Membre Dernière intervention 30 octobre 2005 - 30 oct. 2005 à 20:47
j'ai donc un tableau mur de 15*15 remplit de valeur.
lorsque je choisis une valeur de ce tableau j'aimerais qu'il me comptabilise le nombre de valeur identique adjacents.
J'ai écrit une fonction récursive mais j'ai droit à un débordement de pile. Je cherche donc une solution en C me permettant d'écrire une telle fonction.

voici la fonction récursive :
int Test(int ligne, int colonne, int valeur)
{
if(mur[ligne-1][colonne]== valeur) somme+=pick(ligne-1, colonne, valeur);
if(mur[ligne][colonne-1]== valeur) somme+=pick(ligne, colonne-1, valeur);
if(mur[ligne +1][colonne] == valeur) somme+=pick(ligne +1, colonne, valeur);
if(mur[ligne][colonne+1] == valeur) somme+=pick(ligne, colonne +1, valeur);
return somme;
}

j'essaye de construire une fonction qui grace à des boucles balayent ligne par ligne et par colonne le tableau en testant à chaque fois les valeurs rencontrées.
je ne sais pas si j'ai été très clair. Toute aide est la bienvenue. Merci


Pékélé

3 réponses

cs_Pekele Messages postés 4 Date d'inscription mercredi 22 janvier 2003 Statut Membre Dernière intervention 30 octobre 2005
29 oct. 2005 à 20:57
j'ai fait une erreur, la fonction récursive est ;
int Test(int ligne, int colonne, int valeur){
if(mur[ligne-1][colonne]== valeur) somme+=Test(ligne-1, colonne, valeur);
if(mur[ligne][colonne-1]== valeur) somme+= Test(ligne, colonne-1, valeur);
if(mur[ligne +1][colonne] == valeur) somme+= Test(ligne +1, colonne, valeur);
if(mur[ligne][colonne+1] == valeur) somme+= Test(ligne, colonne +1, valeur); return somme;}
0
cs_Pekele Messages postés 4 Date d'inscription mercredi 22 janvier 2003 Statut Membre Dernière intervention 30 octobre 2005
30 oct. 2005 à 10:16
voilà un code en C qui montre ce aue je cherche à faire :
#include <stdio.h>
#include <math.h>

int mur[14][14],i,j;
int somme=0;
int x=0; int y=0;

int main (int argc, const char * argv[]) {
// insert code here...
printf("retourne le nombre de valeur adjacente dans un tableau\n");
int ligne, colonne;
//remplissage du tableau
for ( i=0;i<15;i++)
for (j=0;j<15;j++)
mur[i][j]=rand()%5;
//affichage du tableau
for ( i=0;i<15;i++)
for (j=0;j<15;j++)
printf("%i\t",mur[i][j]);

while(ligne !=16)
{
printf("\nligne:");
scanf("%i",&ligne);
printf("\ncolone:");
scanf("%i",&colonne);

printf("%d",mur[ligne][colonne],"\n");
printf("\n");

test(ligne,colonne,mur[ligne][colonne]);
printf("\nest présent :%i",somme);
}
}

test ( int ligne, int colonne, int valeur )
{
for ( i=0;i<15;i++){
for (j=0;j<15;j++){
if (mur[ligne+x][colonne]==valeur){x++;somme++;}
if (mur[ligne-x][colonne]==valeur){x++;somme++;}
if (mur[ligne][colonne+y]==valeur){y++;somme++;}
if (mur[ligne][colonne-y]==valeur){y++;somme++;}
}
}
return somme;
}
0
cs_Pekele Messages postés 4 Date d'inscription mercredi 22 janvier 2003 Statut Membre Dernière intervention 30 octobre 2005
30 oct. 2005 à 20:47
pour ceux que ça intéresserait la solution consiste à faire une fonction avec un algo type Flood Fill ( remplissage de proche en proche )
0
Rejoignez-nous