Labyrinthe explication

Signaler
Messages postés
3
Date d'inscription
mercredi 11 juin 2008
Statut
Membre
Dernière intervention
17 juin 2008
-
Messages postés
1
Date d'inscription
dimanche 30 décembre 2007
Statut
Membre
Dernière intervention
21 décembre 2008
-
Je cherche le maximum d'information m'aidant à la compréhension de cet algorithme de labyrinthe
Un ami à fait cet algorithme et je dois mettre en place le dossier pour mon iut malheuresement le langage C n'est pas ma tasse de thé e je ne sais comment repondre aux questions: "présentation de la problématique et Explication de l'algo et des choix techniques faits"

Voici l'algo :

#include <stdio.h>

#include <stdlib.h>

#include <SDL.h>

#define TAILLE 5

typedef struct

{

int x, y;

} cell;

typedef struct

{

cell *pilexy;

int max_TAILLE;

int haut_pile;

} pile;

int creer();

int voisine_libre(int [TAILLE][TAILLE], int, int);

void affichage(int [TAILLE][TAILLE]);

void affichagesdl(int [TAILLE][TAILLE]);

void new_pile(pile *, int);

void kill_pile(pile *);

cell pile_pop(pile *);

void pile_push(pile *, int, int);

int creer()

{

cell labyavant,laby;

int i, j, n=0, num_labyrinthe, nb_visite;

int labyrinthe[TAILLE][TAILLE];

pile s;

new_pile(&s, (TAILLE * TAILLE));

num_labyrinthe = (TAILLE-2) * (TAILLE-2);

nb_visite = 1;

for (i = 0; i < TAILLE; i += 1)

for (j = 0; j < TAILLE; j += 1)

{
if (i 0 || j 0 || i == (TAILLE - 1) ||

j == (TAILLE - 1))

labyrinthe[i][j] = -1;

else

labyrinthe[i][j] = 15;

}

laby.x = 1;

laby.y = 1;

while (nb_visite != num_labyrinthe)

{

n = voisine_libre(labyrinthe, laby.x, laby.y);

while (n != -1)

{

switch (n)

{

case 0:

labyrinthe[laby.y][laby.x] -= 1;

labyrinthe[laby.y - 1][laby.x] -= 4;

labyavant.x = laby.x;

labyavant.y = laby.y;

laby.y -= 1;

break;

case 1:

labyrinthe[laby.y][laby.x] -= 2;

labyrinthe[laby.y][laby.x + 1] -= 8;

labyavant.x = laby.x;

labyavant.y = laby.y;

laby.x += 1;

break;

case 2:

labyrinthe[laby.y][laby.x] -= 4;

labyrinthe[laby.y + 1][laby.x] -= 1;

labyavant.x = laby.x;

labyavant.y = laby.y;

laby.y += 1;

break;

case 3:

labyrinthe[laby.y][laby.x] -= 8;

labyrinthe[laby.y][laby.x - 1] -= 2;

labyavant.x = laby.x;

labyavant.y = laby.y;

laby.x -= 1;

break;

 

 

}

pile_push(&s, laby.x, laby.y);

nb_visite += 1;

n = voisine_libre(labyrinthe, laby.x, laby.y);

}

laby = pile_pop(&s);

}

affichage(labyrinthe);

affichagesdl(labyrinthe);

kill_pile(&s);

 

 

return labyrinthe;

}

 

int voisine_libre(int labyrinthe[TAILLE][TAILLE], int x, int y)

{

int nord, est, sud, ouest;

int rdm;
nord (labyrinthe[y - 1][x] 15) ? 1 : 0;
est (labyrinthe[y][x + 1] 15) ? 1 : 0;
sud (labyrinthe[y + 1][x] 15) ? 1 : 0;
ouest(labyrinthe[y][x - 1] 15) ? 1 : 0;

if ((nord | est | sud | ouest) == 0)

return -1;

for (;;)

{

rdm = rand() % 4;

switch (rdm)

{

case 0:

if (nord == 1) return 0;

case 1:

if (est == 1) return 1;

case 2:

if (sud == 1) return 2;

case 3:

if (ouest== 1) return 3;

}

}

}

void affichage(int a[TAILLE][TAILLE])

{

int i, j;

for (i = 0; i < TAILLE; i += 1)

{

for (j = 0; j < TAILLE; j += 1)

{

printf("%d\t", a[i][j]);

}

printf("\n");

}

}

void affichagesdl(int labyrinthe[TAILLE][TAILLE])

{

//SDLSDLSDL

}

void new_pile(pile *s, int max_TAILLE)

{

s->pilexy = (cell *)calloc(max_TAILLE, sizeof(cell));

s->max_TAILLE = max_TAILLE;

s->haut_pile = 0;

}

void kill_pile(pile *s)

{

free(s->pilexy);

s->max_TAILLE = -1;

s->haut_pile = -1;

}

cell pile_pop(pile *s)

{

cell c;

c = s->pilexy[s->haut_pile];

s->haut_pile -= 1;

return c;

}

void pile_push(pile *s, int x, int y)

{

s->pilexy[s->haut_pile].x = x;

s->pilexy[s->haut_pile].y = y;

s->haut_pile += 1;

}

Ceci ne comprend donc pas l'interface graphique, je ferais peut être un autre post pour cela mais pour l'instant chaque chose en son temps.

2 réponses

Messages postés
12303
Date d'inscription
mardi 10 février 2004
Statut
Modérateur
Dernière intervention
30 juillet 2012
38
salut
je t'ai repondu sur ce post...

http://www.cppfrance.com/infomsg_ALGORITHME-LABYRINTHE_1151821.aspx#4

dit nous plus en detail ce que tu ne comprends pas... parce-que l'algo est simple, et avec autant d'explications, tu devrais pouvoir t'en sortir...
Messages postés
1
Date d'inscription
dimanche 30 décembre 2007
Statut
Membre
Dernière intervention
21 décembre 2008

oth jaimerai bien avoir la suite de se programme svp et l'explication aussi