C prog

mail@pastecode.io avatar
unknown
c_cpp
2 years ago
1.6 kB
1
Indexable
Never
#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);
  }
}