Pb d'execution de mn pg(piles) en C

ameni.enis Messages postés 22 Date d'inscription   Statut Membre Dernière intervention   -  
ameni.enis Messages postés 22 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,
je cherche un chemin dans un labyrinthe,donc j'ai eu recours a cette mèthode avec les piles,,sachant que le labyrinthe est défini avec des 1 pour les murs et 0 sinoon,,la compilation est juste mais l'exécution me gènère "processsus arrêtè" après que je lui donne la case de depart et la case d'arrivèe
SVP si qqun peut m'expliquer ma faute!!!
Merci d'avance
voici mn pg de recherche:
//Recherche chemin
PileEntiers *pile1;
PileEntiers *pile2;
int tab[40];
int succ_h,succ_d,succ_b,succ_g;
int don,don_pas,i=0,j=0;

pile1 = NULL;
pile2 = NULL;

pile1 = empiler (cas_d, pile1);
while(pile1!=NULL)
{
don=consulter(pile1);
tab[i]=don;
i++;
printf("la case marquèe est : %d ",tab[i]);
pile1=depiler(pile1);
//test des successeurs et remplissage de la pile2
if (verifier_haut(A,don)==0) {succ_h=don-8;if (succ_h!=cas_a) pile2 = empiler (succ_h, pile2); else break;}
if (verifier_droite(A,don)==0) {succ_d=don+1;if (succ_d!=cas_a) pile2 = empiler (succ_d, pile2); else break;}
if (verifier_bas(A,don)==0) {succ_b=don+8;if (succ_b!=cas_a) pile2 = empiler (succ_b, pile2); else break;}
if (verifier_gauche(A,don)==0) {succ_g=don+8;if (succ_g!=cas_a) pile2 = empiler (succ_g,pile2); else break;}
//la pile1 prend les elements de la pile2
while (pile2!=NULL)
{
don_pas=consulter(pile2);
while(j<i) //verifier que la donnèe de passage n'existe pas dans le tab de marquage
{ if (tab[j]!=don_pas) j++ ; else { depiler(pile2); break;}}
if (j==i) pile1=empiler(don_pas,pile1);
j=0;
}
}
if (succ_h==cas_a) tab[i]=succ_h;
if (succ_d==cas_a) tab[i]=succ_d;
if (succ_b==cas_a) tab[i]=succ_b;
if (succ_g==cas_a) tab[i]=succ_g;

if (pile1==NULL) printf("\npas de chemin");
//desallocation
desallouer (pile1);
pile1 = NULL;
desallouer (pile2);
pile2 = NULL;

1 réponse

loupius
 
Je suis curieux de voir ce que contiennent les fonctions 'empiler', 'depiler' et 'desallouer'... vu le message d'erreur, disons que j'ai comme un soupçon ;-)
A suivre.
0
ameni.enis Messages postés 22 Date d'inscription   Statut Membre Dernière intervention  
 
voici les diffèrentes fonctions que g choisi;;alors????

typedef struct pileentiers {
int donnee;
struct pileentiers *suivant;
} PileEntiers;

PileEntiers *empiler (int a, PileEntiers* p) {
PileEntiers *nouveau;

nouveau = (PileEntiers *) malloc (sizeof (PileEntiers));
if (nouveau == NULL) {
printf ("Erreur d'allocation\n");
exit (1);
}

nouveau->donnee = a;
nouveau->suivant = p;
return nouveau;
}

PileEntiers *depiler (PileEntiers *p) {
PileEntiers *sommet;

sommet = p;

if (sommet != NULL) {
sommet = sommet->suivant;
free (p);
}

return sommet;
}

int consulter (PileEntiers *p) {
if (p == NULL) {
printf ("Erreur : pile vide");
exit (1);
}

return p->donnee;
}
0
ameni.enis Messages postés 22 Date d'inscription   Statut Membre Dernière intervention   > ameni.enis Messages postés 22 Date d'inscription   Statut Membre Dernière intervention  
 
et la fonction 'desallouer'

void desallouer (PileEntiers *p) {
PileEntiers *sommet = p;

while (sommet != NULL) {
sommet = depiler (sommet);
}
}
0