Pb avec un labyrinthe

skinia Messages postés 74 Date d'inscription dimanche 3 mars 2002 Statut Membre Dernière intervention 17 septembre 2006 - 24 déc. 2002 à 00:01
cs_paupau Messages postés 1 Date d'inscription vendredi 14 novembre 2003 Statut Membre Dernière intervention 19 décembre 2003 - 19 déc. 2003 à 15:58
je suis sur un projet de labyrinthe et j'ai bloqué pour l' algorithme du plus court chemin (entre un pt qq du labyrinthe et la cible au milieu).
le labyrinthe est une matrice carrée et voici comment est ennoncé le sujet:

Les cases sont numérotées de 0 à N= t²-1 ou t est la taille du labyrinthe(mat carrée).Pour mémoriser un chemin, on utilise un tableay C de N élémentsou C[i] désigne la case prédecesseur de i ds le plus court chemin. Par définition si une case i n'est pas dans le chemin on a C[i]=-1 et si une case est la première du chemin on a C[i]=i.
exemple->>labyrinthe a 16 cases

0 1 2 3
0 1 1
1 1 C
2
3

Les cases sont numérotées de 0 à 15. Et le tableay C qui code ce chemin est tel que C[6]=5; C[5]=1; C[1]=0; C[0]=0;
C[2]=C[3]=C[4]=C[7]=...=C[15]=-1;
l'agorithme est tel que:
Il s'agit d'explorer le laby en largeur,cet algo est tel que il utilise un structure de file.

1. pour toute case i,initialiser C[i] à -1 et le marquage à faux.
2. Initialiser C[a]=a et marquer a.
3. ajouter a à la file F (initialement vide).
4. Répéter
(a) récupérer la case k dans F et l'enlever de F.
(b) pour toute case l accessible depuis k et non marquée
i. marquer l
ii. ajouter l à la file
iii.mise à jour du chemin: C[l] =k.
5. tant que B n'est pas marquée et F n'est pas vide.

A la fin de l'algo le tableau C décrit le plus court chemin.En partant de la case b, on peut remonter le long du chemin jusqu'à rencontrer la case de départ a et ainsi compter le nbre de coups.Si à la fin de l'algo la case b n'est pas marquée c'est qu'il n'existe pas de plus court chemin.
La file F sera décrite par un objet de classe file.La file sera codée par un tableau d'entier (les cases) ainsi qu'un indice de début (tête) et un indice de fin(queue).
Une file est un ensemble géré selon le principe FIFO (premier entré premier sorti) .La classe file aura une méthode ajouer qui permet d'ajouter un élément en queue de file, une méthode enlever qui permet de récupérer l'elt en tête de la file et l'enlever de la file ainsi qu'une méthode estvide.

si qq connait cet algorithme ou si il arrive a trouver la solution
alors il est fort car moi j'ai rien pigé.

4 réponses

cs_GoldenEye Messages postés 527 Date d'inscription vendredi 14 septembre 2001 Statut Membre Dernière intervention 6 octobre 2008 4
24 déc. 2002 à 12:49
-------------------------------
Réponse au message : Cherche Djikstra sur google
-------------------------------

> je suis sur un projet de labyrinthe et j'ai bloqué pour l' algorithme du plus court chemin (entre un pt qq du labyrinthe et la cible au milieu).
> le labyrinthe est une matrice carrée et voici comment est ennoncé le sujet:
>
> Les cases sont numérotées de 0 à N= t²-1 ou t est la taille du labyrinthe(mat carrée).Pour mémoriser un chemin, on utilise un tableay C de N élémentsou C[i] désigne la case prédecesseur de i ds le plus court chemin. Par définition si une case i n'est pas dans le chemin on a C[i]=-1 et si une case est la première du chemin on a C[i]=i.
> exemple->>labyrinthe a 16 cases
>
> 0 1 2 3
> 0 1 1
> 1 1 C
> 2
> 3
>
> Les cases sont numérotées de 0 à 15. Et le tableay C qui code ce chemin est tel que C[6]=5; C[5]=1; C[1]=0; C[0]=0;
> C[2]=C[3]=C[4]=C[7]=...=C[15]=-1;
> l'agorithme est tel que:
> Il s'agit d'explorer le laby en largeur,cet algo est tel que il utilise un structure de file.
>
> 1. pour toute case i,initialiser C[i] à -1 et le marquage à faux.
> 2. Initialiser C[a]=a et marquer a.
> 3. ajouter a à la file F (initialement vide).
> 4. Répéter
> (a) récupérer la case k dans F et l'enlever de F.
> (b) pour toute case l accessible depuis k et non marquée
> i. marquer l
> ii. ajouter l à la file
> iii.mise à jour du chemin: C[l] =k.
> 5. tant que B n'est pas marquée et F n'est pas vide.
>
> A la fin de l'algo le tableau C décrit le plus court chemin.En partant de la case b, on peut remonter le long du chemin jusqu'à rencontrer la case de départ a et ainsi compter le nbre de coups.Si à la fin de l'algo la case b n'est pas marquée c'est qu'il n'existe pas de plus court chemin.
> La file F sera décrite par un objet de classe file.La file sera codée par un tableau d'entier (les cases) ainsi qu'un indice de début (tête) et un indice de fin(queue).
> Une file est un ensemble géré selon le principe FIFO (premier entré premier sorti) .La classe file aura une méthode ajouer qui permet d'ajouter un élément en queue de file, une méthode enlever qui permet de récupérer l'elt en tête de la file et l'enlever de la file ainsi qu'une méthode estvide.
>
>
> si qq connait cet algorithme ou si il arrive a trouver la solution
> alors il est fort car moi j'ai rien pigé.
0
skinia Messages postés 74 Date d'inscription dimanche 3 mars 2002 Statut Membre Dernière intervention 17 septembre 2006
24 déc. 2002 à 18:31
-------------------------------
Réponse au message : désolé mais j'ai rien capté a Djikstra c'est peut etre un peu poussé pour mon niveau.
je veux juste le plus court chemin dans un labyrinthe.
ya bien un ptit algorithme qui traine qqpart?

-------------------------------

>
>
>
>
> -------------------------------
> Réponse au message : Cherche Djikstra sur google
> -------------------------------
>
> > je suis sur un projet de labyrinthe et j'ai bloqué pour l' algorithme du plus court chemin (entre un pt qq du labyrinthe et la cible au milieu).
> > le labyrinthe est une matrice carrée et voici comment est ennoncé le sujet:
> >
> > Les cases sont numérotées de 0 à N= t²-1 ou t est la taille du labyrinthe(mat carrée).Pour mémoriser un chemin, on utilise un tableay C de N élémentsou C[i] désigne la case prédecesseur de i ds le plus court chemin. Par définition si une case i n'est pas dans le chemin on a C[i]=-1 et si une case est la première du chemin on a C[i]=i.
> > exemple->>labyrinthe a 16 cases
> >
> > 0 1 2 3
> > 0 1 1
> > 1 1 C
> > 2
> > 3
> >
> > Les cases sont numérotées de 0 à 15. Et le tableay C qui code ce chemin est tel que C[6]=5; C[5]=1; C[1]=0; C[0]=0;
> > C[2]=C[3]=C[4]=C[7]=...=C[15]=-1;
> > l'agorithme est tel que:
> > Il s'agit d'explorer le laby en largeur,cet algo est tel que il utilise un structure de file.
> >
> > 1. pour toute case i,initialiser C[i] à -1 et le marquage à faux.
> > 2. Initialiser C[a]=a et marquer a.
> > 3. ajouter a à la file F (initialement vide).
> > 4. Répéter
> > (a) récupérer la case k dans F et l'enlever de F.
> > (b) pour toute case l accessible depuis k et non marquée
> > i. marquer l
> > ii. ajouter l à la file
> > iii.mise à jour du chemin: C[l] =k.
> > 5. tant que B n'est pas marquée et F n'est pas vide.
> >
> > A la fin de l'algo le tableau C décrit le plus court chemin.En partant de la case b, on peut remonter le long du chemin jusqu'à rencontrer la case de départ a et ainsi compter le nbre de coups.Si à la fin de l'algo la case b n'est pas marquée c'est qu'il n'existe pas de plus court chemin.
> > La file F sera décrite par un objet de classe file.La file sera codée par un tableau d'entier (les cases) ainsi qu'un indice de début (tête) et un indice de fin(queue).
> > Une file est un ensemble géré selon le principe FIFO (premier entré premier sorti) .La classe file aura une méthode ajouer qui permet d'ajouter un élément en queue de file, une méthode enlever qui permet de récupérer l'elt en tête de la file et l'enlever de la file ainsi qu'une méthode estvide.
> >
> >
> > si qq connait cet algorithme ou si il arrive a trouver la solution
> > alors il est fort car moi j'ai rien pigé.
>
0
arthroz Messages postés 3 Date d'inscription vendredi 27 décembre 2002 Statut Membre Dernière intervention 9 janvier 2003
3 janv. 2003 à 19:57
ca sent l'iupien =)
0
cs_paupau Messages postés 1 Date d'inscription vendredi 14 novembre 2003 Statut Membre Dernière intervention 19 décembre 2003
19 déc. 2003 à 15:58
paupau

je cherche un programme en pascal sur un labyrinthe..
pauline.vdb@libertysurf.fr

tks... very much
0
Rejoignez-nous