begin process at 2012 05 30 02:53:39
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C

 > 

Divers

 > 

Général

 > 

Labyrinthe explication


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Labyrinthe explication

mardi 17 juin 2008 à 14:43:43 | Labyrinthe explication

tiquent

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.

mercredi 18 juin 2008 à 07:14:21 | Re : Labyrinthe explication

coucou747

Administrateur CodeS-SourceS
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...
dimanche 21 décembre 2008 à 19:05:46 | Re : Labyrinthe explication

oth85



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


Cette discussion est classée dans : taille, int, pile, labyrinthe, laby


Répondre à ce message

Sujets en rapport avec ce message

conversion decimal en binaire sans connaitre la taille du nombre [ par kobee12 ] Est ce que quelqu'un pourrait m'aider. Voici un algo qui convertit un nombre biaire en decimal : bin_digits est defini avec une taille de 10. Or j'aim taille d'un INT [ par sena ] Bonjour,voila ce que je fais:int variable;variable = 367200;Ceci fonctionne.or je lis dans les bouqins qu'un int ne doit pas dépasser +32768Comment ce Help Me [ par manta7 ] Bonjour, j'aimerais coder un fonction qui prend en paramètre un tableau de nombres entiers, et qui recherche, dans ce tableau, la plus grande différen Utilisation de stack en C++ [ par jagdjg ] J essaie de faire un stack mais ca ne marche pas La declaration est : Stack* pile = new Stack();le push : pile->Push(strPile);le pop : strPile = pile- Taille d'un pointeur ou d'un tableau ( très bizarre ) [ par thristam ] Bonjour à tous,Quand je veux connaitre la taille d'un tableau , je fais :int i[10];coutPas de problème Par contre , si je fais la même chose avec un p taille tableau [ par MiTcH37 ] J'aimerai savoir comment connaitre la taile d'un tableau, pour ne pas les envoyer comme argument dans une fonction.ex : void fct(int trier[], int tail C ANSI allocation dynamique de tableau [ par pedu ] Ce petit pro beug en sortie, pourquoi et que faire ?#include #include int (*pi)[1][1]; /* pointeur sur un tableau d'entiers */void main(void){ unsi Classe et Piles... [ par Amanobuo ] Bonjours,j'apprend les class et je voudrais pour m'entrainer realiser une implementation statique de type pile grace a une class. Le code est bugé car Patron de classe et precompilation [ par popi0016 ] Bonjour, j'essaie de programmer avec Builder6 (Borland) mes 1ers patrons de classe. Malgre bien avoir suivit mon tutorial le compilateur refuse la com un tit coup de pouce pour une pile ??? [ par noisette87 ] voici le debut de mon programme :#include #include #include //---------------------------------------------------------------------------#pragma argsu


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

Photothèque

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,248 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales