cs_imanouu
Messages postés9Date d'inscriptionlundi 16 février 2009StatutMembreDernière intervention 2 mars 2009
-
1 mars 2009 à 15:45
cs_imanouu
Messages postés9Date d'inscriptionlundi 16 février 2009StatutMembreDernière intervention 2 mars 2009
-
2 mars 2009 à 21:47
Bonjour à tous,
J'ai un tp à faire sur un labyrinthe apparemment "très classique" mais malgré ça j'ai beauuucoup de mal à le faire.
Mon problème n°1: J'ai méme pas compris cette question:
nhervagault
Messages postés6063Date d'inscriptiondimanche 13 avril 2003StatutModérateurDernière intervention15 juillet 201137 1 mars 2009 à 18:26
Salut,
Pour innonder ton labyrinthe
il faut que tu fasses un parcours qui a partir de l'entrée de ton labyrinthe passe par toutes les cases atteignables de ton labirynthe.
Un parcours recursif est l'ideal tu parcours chaque chemin tant que tu n'es pas blqoué ou arrive à la fin.
Pour le chemin le plus long
tu retiens le chemin le plus long (0 à l'init)
et dés que tu arrives à la fin tu compares avec la valeur initiale si > alors tu changes la valeur stockée et sinon tu recommence
si tu es en cul de sac tu reprends le chemin suivant dans le parcours
l'algo d'innodation te permettta de parcourir tout le labyrinthe
il suffit de modifier le DFS pour compter le nombre de cases entre le debut et la fin de ton laby
cs_imanouu
Messages postés9Date d'inscriptionlundi 16 février 2009StatutMembreDernière intervention 2 mars 2009 1 mars 2009 à 18:34
Merci pour la 1ere question j'ai enfin réussi à la faire.Mais pr ce qui est du plus court chemin u encore le plus long je tombe a chaque fois sur un résultat bizarre "DEUX CASES QUI NE SONT PAS VOISINES" ce qui est bien sur archi faux!!! Et je vois pas où est le probléme
cs_imanouu
Messages postés9Date d'inscriptionlundi 16 février 2009StatutMembreDernière intervention 2 mars 2009 1 mars 2009 à 19:38
justement le avec lequel je travaille est déja petit.Je peux si tu veux bien te l' envoyer par mail et y jeter un coup d'oeil stp en plus c'est à rendre aprés demain et j'ai fait tt mon possible je déséspére
et Merci beauuuucoup
Vous n’avez pas trouvé la réponse que vous recherchez ?
coucou747
Messages postés12303Date d'inscriptionmardi 10 février 2004StatutMembreDernière intervention30 juillet 201244 2 mars 2009 à 03:32
salut
envoie ton code ici, ca ira plus vite.
innonder son laby, ce n'est pas qqch de vraiment recursif : il s'agit d'un parcours en profondeur : ca se fait avec une file first in first out.
tu mets la case de depart dans la file.
tant qu'il y a une case dans la file, faire :
si on avait pas deja parcourru cette case, faire :
mettre dans la file les cases qui touchent la case courante.
fin si
fin tant que
en faisant ca, nos goutes d'eau (qui parcourent en meme temps tout les chemins) vont toutes a la meme vitesse.
cs_imanouu
Messages postés9Date d'inscriptionlundi 16 février 2009StatutMembreDernière intervention 2 mars 2009 2 mars 2009 à 19:56
Travail à compléter<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /??>
voici exactement en quoi ca consiste:
aidez moi s'il vous plait parce que je dois le rendre demain et je m'en sors pas toute seule j'ai à peine fait la 1ere question!!!
Question 2.1
Soit le labyrinthe suivant extrait du fichier minizoo.laby :
+-+-+-+-+
|I | |
+-+ +-+-+
| | | |
+ + + +-+
| | | | |
+-+ + +-+
| O|
+-+-+-+-+
Représentez l’
espace d’états
de son graphe non orienté. En déduire toutes ses composantes connexes. Puis donnez la représentation mémoire de sa matrice port.
Question 2.2
En vous servant des classes fournies, définissez et implémentez en C++ une méthode dans la classe Chemins qui recherche et affiche toutes les composantes connexes du labyrinthe.
Question 2.3
On souhaite faire trois parcours de chemins d’un sommet de départ au sommet de sortie :
1-
Inonder le labyrinthe en parcourant tous les chemins du labyrinthe,
2-
Chercher le plus court chemin en parcourant le labyrinthe en largeur (BFS) avec une file d’attente : voir les méthodes enfiler et defiler de la classe ListeNoeuds.
3-
Chercher le plus long chemin en parcourant le labyrinthe en profondeur (DFS) avec une pile : voir la méthode empiler de la classe ListeNoeuds,
coucou747
Messages postés12303Date d'inscriptionmardi 10 février 2004StatutMembreDernière intervention30 juillet 201244 2 mars 2009 à 20:09
salut
on a pas pour habitude de faire les tps des gens a leur place.
si tu nous disait precisement sur quoi tu bloques, que tu nous montrait ton code, et l'erreur qui te pose probleme, on pourrait peut-etre t'aider, mais certainement pas te le faire a ta place.
cs_imanouu
Messages postés9Date d'inscriptionlundi 16 février 2009StatutMembreDernière intervention 2 mars 2009 2 mars 2009 à 20:15
oui je sais!!!!! Mais je demande juste des indications pas plus et en plus j'ai déja essayé de le faire!!!
Mon probléme c'est quand je fais la file et je combine les résultats de l'affichage je trouve un résultat IMPOSSIBLE à moins qu'il saute!!!ce qui n'est pas possible.
Donc si quelqu'un voit où est le probléme je lui serai reconnaissante!!
Merci pour ceux qui voudront bien m'aider.
Une débutante en programmation déséspérée.
void ListeNoeuds::empiler(Sommet *ps) {
Noeud *nouveau = NULL ;
nouveau = new Noeud(ps); // appel du constructeur de Noeud
nouveau->setNext(tete);
tete = nouveau;
taille++ ;
}
void ListeNoeuds::enfiler (Sommet *ps) {
Noeud *nouveau = NULL ;
nouveau = new Noeud (ps) ; // appel du constructeur de Noeud
if (estVide()==true) tete queue nouveau ;
else {
queue->setNext (nouveau) ;
queue = nouveau;
}
taille++ ;
}
Sommet *ListeNoeuds::defiler () { // on suppose que la file n’est pas vide
Noeud *temp = tete ;
Sommet *s = temp->s ;
if (tete==queue) tete queue NULL ;
else
tete = tete->getNext () ;
delete (temp) ; // appel du destructeur de Noeud
taille-- ;
return s ;
}
dans ListeNoeuds.h
#ifndef FILENOEUDS
#define FILENOEUDS
#include "Noeud.h"
#include
using namespace std;
class ListeNoeuds
{
private:
int taille ; // nombre de noeuds
Noeud *tete, *queue ; // objets dynamiques sur le premier et dernier noeud
bool marque ; // marquage de l’ancre lors d'un parcours de chemin
public:
// constructeur par défaut
ListeNoeuds ();
// prototypes des méthodes
int getTaille () ; // accesseur en lecture de taille
Noeud *getTete(); // accesseur en lecture de tete
Noeud *getQueue(); // accesseur en lecture de queue
bool getMarque(); // fonction booléenne qui vérifie si l'ancre est marquée
void setMarque(bool pmarque);// Procédure qui met à true ou false la marque de l'ancre
bool estVide (); // fonction booléenne qui vérifie si la liste est vide ou non
void empiler(Sommet *ps); // empiler un sommet en tete de la liste
void enfiler (Sommet *ps); // enfiler un sommet en queue de la liste
Sommet *defiler (); // defiler un sommet de la tete de la liste
};
cs_imanouu
Messages postés9Date d'inscriptionlundi 16 février 2009StatutMembreDernière intervention 2 mars 2009 2 mars 2009 à 21:47
pour trouver le plus court chemin voici l'algorithme que j'utilise:
1.Mettre le noeus de départ ds la file
2.retirer le noeud du début de la file pour l'examiner
3.Mettre tous les voisins non examinés dans la file
4.Si la file n'est pas vide reprendre l'étape2
J'aimerai s'il vous plait savoir si on a genre deux élements est ce qu'on prend les voisins non encore marqués de tous les autres éléments avant ou seulement ceux de l'élément accessible.