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 -
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;
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;
A voir également:
- Pb d'execution de mn pg(piles) en C
- Pile de bios - Guide
- Faut il mettre des piles rechargeables dans un téléphone fixe ✓ - Forum telephonie fixe
- Piles manette wii - Forum Wii
- Piles rechargeables ou pas dans mon telephone fixe? - Forum Mobile
- Chargement de nouvelles piles (rechargeables) - Forum telephonie fixe
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;
}
void desallouer (PileEntiers *p) {
PileEntiers *sommet = p;
while (sommet != NULL) {
sommet = depiler (sommet);
}
}