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

 C Discussion :

Backtracking probléme du cavalier


Sujet :

C

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 3
    Points : 1
    Points
    1
    Par défaut Backtracking probléme du cavalier
    Bonjour, je suis en train de programmer une résolution du probléme du cavalier, qui consiste a parcourir toutes les cases d'un echiquier en ne passant qu'une seule fois par case.
    J'utilise pour cela le backtracking, il tourne bien dés qu'il est bloqué (sinon il joue toujours le premier coup possible), il tente une autre voie.. mais voila, il revient toujours vers les cases de depart...sic..
    Quelqu'un pourrait-il m'expliquer pourquoi..?
    Et pour le code, je sais qu'il n'est pas trés propre, mais je suis tellement embété du fait que ca tourne pas ... j'attends que ca fonctionne pour l'ameliorer.
    Amicalement.

    nb: J'ai oublié de dire qu'il seg/fault au bout d'une trentaine de secondes de recherches (je ne pense pas que ce soit par depassement de tableau, car je demande 20000 cases, et il n'effectue que 2000 tests et des poussiéres

  2. #2
    Modérateur
    Avatar de ToTo13
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Janvier 2006
    Messages
    5 793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 793
    Points : 9 860
    Points
    9 860
    Par défaut
    Bonjour,

    je viens de jeter un coup d'oeil à ta fonction boucle et je pense que le problème vient de là.
    Si j'ai bien compris, "chemin[x][y]=1;" signifie que la case a été visitée par le cavalier.
    Et bien il faut mettre à 1 chaque fois que tu vas visiter la case, puis remettre à 0 afin de pouvoir faire la backtrack.
    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    if ( CoupValide(x+r,y+c) )
       {
       chemin[x+r][y+c] = 1 ; // La case est jouée...
       boucle(x+r,y+c) ; // On y va
       chemin[x+r][y+c] = 0 ; // On backtrack, donc la case n'est plus jouée...
       }
    Consignes aux jeunes padawans : une image vaut 1000 mots !
    - Dans ton message respecter tu dois : les règles de rédaction et du forum, prévisualiser, relire et corriger TOUTES les FAUTES (frappes, sms, d'aurteaugrafe, mettre les ACCENTS et les BALISES) => ECRIRE clairement et en Français tu DOIS.
    - Le côté obscur je sens dans le MP => Tous tes MPs je détruirai et la réponse tu n'auras si en privé tu veux que je t'enseigne.(Lis donc ceci)
    - ton poste tu dois marquer quand la bonne réponse tu as obtenu.

  3. #3
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    Je ne pense pas que le problème vienne de là, car la valeur qur reçoit 'chemin[x][y]' à chaque tour n'est pas 1, mais le numéro du tour joué, c'est plus pratique pour moi de faire comme ça parce que je n'ai pas a garder en memoire les coups joués, un max du tableau me donne le dernier coup,
    qu'en pensez-vous ?

  4. #4
    Modérateur
    Avatar de ToTo13
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Janvier 2006
    Messages
    5 793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 793
    Points : 9 860
    Points
    9 860
    Par défaut
    Bonjour,

    je pense que c'est une solution, voire même une bonne idée, mais qu'il faut quand même supprimer la valeur pour pouvoir backtracker sinon la case sera toujours considérée comme étant visitée...
    Donc on aura quelque chose comme ça :
    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    if ( coup == 64 ) {...}
    ...
    if ( CoupValide(x+r,y+c) )
       {
       chemin[x+r][y+c] = Coup ; // La case est jouée...
       boucle(x+r,y+c, Coup+1) ; // On y va
       chemin[x+r][y+c] = 0 ; // On backtrack, donc la case n'est plus jouée...
       }
    Consignes aux jeunes padawans : une image vaut 1000 mots !
    - Dans ton message respecter tu dois : les règles de rédaction et du forum, prévisualiser, relire et corriger TOUTES les FAUTES (frappes, sms, d'aurteaugrafe, mettre les ACCENTS et les BALISES) => ECRIRE clairement et en Français tu DOIS.
    - Le côté obscur je sens dans le MP => Tous tes MPs je détruirai et la réponse tu n'auras si en privé tu veux que je t'enseigne.(Lis donc ceci)
    - ton poste tu dois marquer quand la bonne réponse tu as obtenu.

  5. #5
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    Ok merci, j'ai passé la journée a refondre le code, et là j'ai quelque chose qui tourne a peu prés, tout dans mon code était de travers,
    moralité: toujours penser a l'avance a toutes les fonctions, une sorte de plan-schéma de la mort,
    ou rien ne peut t'echapper et prévoir des plans B, C ...Z
    Bon pour delestage !

    Merci pour l'attention accordée aux messages ToTo13.
    Amicalement.

Discussions similaires

  1. Problème souris sur BackTrack 3
    Par MigL32bit dans le forum Autres
    Réponses: 0
    Dernier message: 23/03/2010, 20h07
  2. problème avec le backtracking(sudoku)
    Par anouarou dans le forum C
    Réponses: 1
    Dernier message: 12/09/2009, 16h51
  3. Problème de backtracking
    Par Floflo_85 dans le forum Prolog
    Réponses: 5
    Dernier message: 21/11/2007, 13h50
  4. Réponses: 2
    Dernier message: 03/06/2007, 23h04
  5. [BACKTRACK] Problème de boot
    Par black is beautiful dans le forum Autres
    Réponses: 7
    Dernier message: 03/06/2007, 21h37

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