IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

SL & STL C++ Discussion :

[Vector] Chemin parcouru


Sujet :

SL & STL C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre chevronné Avatar de seeme
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    430
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 430
    Par défaut [Vector] Chemin parcouru
    Bonjour à tous,

    Voilà, je débute avec les vecteurs et je rencontre un problème (je pense que ma compréhension de ces conteneurs est erronée...)

    J'ai un plateau divisé en cases de tailles égales sur lequel se déplace un personnage.

    Je voudrais suivre son parcours afin de contraindre ses mouvements (ex: mon perso à 10 crédits de déplacements c'est à dire que la somme du poids des cases traversées doit être inférieure ou égale à 10), sachant qu'il doit être possible de revenir en arrière.

    En première approche, je me suis dis:

    Si le personnage change de case:
    Si l'indice de la case est dans le vecteur des cases visitées:
    Je le retire du vecteur (<=> retour sur ses pas)
    //Je verrais plus tard pour le cas des boucles
    Sinon
    j'ajoute l'indice de cette case dans le vecteur
    Finsi

    //Cette partie pose problème mais je verrai plus tard...
    Je calcul la somme pondérée du poids des cases visitées
    Je regarde le poids des cases adjacentes pour établir un vecteur des cases suivantes autorisées.
    Finsi

    Ce qui s'est traduit par:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    bool Character::updatePath(Cell cellule){ 
       for (std::vector<Cell>::iterator it = Path.begin(); it != Path.end(); ) 
       { 
           if (it->getNumber() == cellule.getNumber()){ 
               it = Path.erase(it); 
             return false; 
           }else 
               ++it; 
       } 
       Path.push_back(cellule); 
       return true; 
    }
    Qui est appelée à chaque fois que le personnage change de case.

    Le problème c'est que le chemin ne se construit pas correctement...

    (Et que le vecteur des cases envisageables est foireux, mais bon un problème à la fois...)

    Merci d'avance
    @+
    Seeme


    Edit: il est fort possible que mon algo soit complètement bidon mais sur le moment je manquais de temps (note à moi-même: toujours prendre le temps...), je suis en train de voir si on peut faire plus intelligent (et on peut toujours...)

  2. #2
    Candidat au Club
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Décembre 2008
    Messages : 4
    Par défaut
    Personnellement, je verrais plus Path comme une std::list<Cell> (je me base sur le code que tu donnes, après, c'est toi qui sais). Sinon tu peux rendre ta fonction plus concise avec la SL (le code suivant nécessite que "bool operator==(const Cell &, const Cell &)" soit implémenté, code non-testé):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    #include <list>
    #include <algorithm>
     
    bool Character::updatePath(const Cell &cellule)
    { 
    	typename std::list<Cell>::const_iterator It =
    		std::find(Path.begin(), Path.end(), cellule);
    	if(It != Path.end())
    	{
    		Path.erase(It);
    		return false;
    	}
     
    	Path.push_back(cellule); 
    	return true; 
    }

Discussions similaires

  1. Réponses: 1
    Dernier message: 08/04/2015, 10h02
  2. [JFileChooser] comment sauvegarder le chemin du dernier dossier parcouru?
    Par Nicolas_555 dans le forum Agents de placement/Fenêtres
    Réponses: 2
    Dernier message: 07/02/2008, 16h07
  3. [MySQL] statistiques sur le meilleur chemin parcouru
    Par kurtalis dans le forum Langage SQL
    Réponses: 2
    Dernier message: 02/06/2006, 11h35
  4. [FORMS] Chemin des icones (intégré FAQ 150 QR)
    Par jerome62 dans le forum Forms
    Réponses: 2
    Dernier message: 30/07/2002, 08h32
  5. Algorithme de recherche de chemin
    Par amelie gaya dans le forum Algorithmes et structures de données
    Réponses: 3
    Dernier message: 09/06/2002, 15h29

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo