C prog
unknown
c_cpp
3 years ago
1.6 kB
9
Indexable
#include <stdbool.h>
struct Parcelle {
int x;
int y;
};
struct ListeChainee {
struct Parcelle parcelle;
struct ListeChainee* suivant;
};
void ExtraireObjet(int** matrice, int n, int m, struct Parcelle parcelle, int valeur, struct ListeChainee** objet) {
// Si l'objet n'a pas encore été créé, on le crée
if (*objet == NULL) {
*objet = malloc(sizeof(struct ListeChainee));
(*objet)->parcelle = parcelle;
(*objet)->suivant = NULL;
} else {
// On crée un nouvel élément à ajouter à la fin de la liste
struct ListeChainee* nouvel_element = malloc(sizeof(struct ListeChainee));
nouvel_element->parcelle = parcelle;
nouvel_element->suivant = NULL;
// On parcourt la liste pour trouver sa fin
struct ListeChainee* element_courant = *objet;
while (element_courant->suivant != NULL) {
element_courant = element_courant->suivant;
}
// On ajoute le nouvel élément à la fin de la liste
element_courant->suivant = nouvel_element;
}
int x = parcelle.x;
int y = parcelle.y;
// Si la valeur de la parcelle est différente de valeur, on arrête la récursion
if (matrice[x][y] != valeur) {
return;
}
// On marque la parcelle comme visitée
matrice[x][y] = -1;
// On récupère les coordonnées des parcelles voisines
struct Parcelle voisins[4] = {{x-1, y}, {x+1, y}, {x, y-1}, {x, y+1}};
// On appelle récursivement la fonction sur chacun des voisins
for (int i = 0; i < 4; i++) {
ExtraireObjet(matrice, n, m, voisins[i], valeur, objet);
}
}
Editor is loading...