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

Fermé
ameni.enis Messages postés 22 Date d'inscription mardi 3 février 2009 Statut Membre Dernière intervention 26 mai 2010 - 8 mai 2009 à 08:23
ameni.enis Messages postés 22 Date d'inscription mardi 3 février 2009 Statut Membre Dernière intervention 26 mai 2010 - 8 mai 2009 à 14:33
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

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 mardi 3 février 2009 Statut Membre Dernière intervention 26 mai 2010
8 mai 2009 à 14:07
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 mardi 3 février 2009 Statut Membre Dernière intervention 26 mai 2010 > ameni.enis Messages postés 22 Date d'inscription mardi 3 février 2009 Statut Membre Dernière intervention 26 mai 2010
8 mai 2009 à 14:33
et la fonction 'desallouer'

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

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