C prog
unknown
c_cpp
3 years ago
1.6 kB
5
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...