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

Langage PHP Discussion :

[POO] [Débutant] Résolveur de sudoku en PHP


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 21
    Par défaut [POO] [Débutant] Résolveur de sudoku en PHP
    Bonjour à tous,

    Je cherche à faire un résolveur de sudoku mais j'ai beaucoup de mal.
    J'ai créé une fonction mais elle foire.

    Est-ce que quelqu'un pourrait m'aider ?

    Merci d'avance.

  2. #2
    Membre Expert

    Profil pro
    imposteur
    Inscrit en
    Avril 2003
    Messages
    3 308
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : imposteur

    Informations forums :
    Inscription : Avril 2003
    Messages : 3 308
    Par défaut
    Citation Envoyé par vinche999
    Est-ce que quelqu'un pourrait m'aider ?
    C'est un forum d'entraide, donc dans l'absolu, sans doute.
    Ya plus qu'à poser ta question (sans doute assortie d'un bout de code bien choisi).

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 21
    Par défaut
    Voilà la fonction :

    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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
     
    function resolution($i=0) {
     
       global $grille,$chiffres,$fin;
       for($ligne=0; $ligne<9; $ligne++) {
     
          for($colonne=0; $colonne<9; $colonne++) {
     
             if($grille[$ligne][$colonne]) continue;
     
             shuffle($chiffres); 
             for($k=0; $k<sizeof($chiffres); $k++) { $nombre = $chiffres[$k];
     
                if(in_array($nombre,$grille[$ligne])) continue;
     
                if(in_array($nombre,colonne($colonne))) continue;
     
                if(in_array($nombre,region($grille,$ligne,$colonne))) continue;
     
                $nombre_chiffre=$grille[$ligne][$colonne];
                $grille[$ligne][$colonne]=$nombre;
     
                if(($ligne==9-1)&&($colonne==9-1)) $fin=true;
                if($fin) return;
                // Non alors essaye de continuer
                resolution($ligne);
                // Sinon essaye avec le chiffre suivant
                if(!$fin) $grille[$ligne][$colonne]=$nombre_chiffre;
             }
             return;
          }
       }
    }
    Voilà la fonction de résolution.

    Veux-tu que je donne tout le code ,

  4. #4
    Membre Expert

    Profil pro
    imposteur
    Inscrit en
    Avril 2003
    Messages
    3 308
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : imposteur

    Informations forums :
    Inscription : Avril 2003
    Messages : 3 308
    Par défaut
    Citation Envoyé par vinche999
    Veux-tu que je donne tout le code ,
    Non, je voudrais que tu arrives à formuler une question.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 21
    Par défaut
    Voici la ligne de code où apparement le code à des soucis :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    shuffle($chiffres); 
    for($k=0; $k<sizeof($chiffres); $k++) { $nombre = $chiffres[$k];
    Certains sudoku sont résolus, d'autres pas.
    Dans certains cas, il n'y a même pas de résolution, le temps est beaucoup trop long. Je ne vois pas où est le problème dans le code.

    Quand j'ai une grille vide, aucun problème.
    La fonction me genère toutes des grilles correctes.

  6. #6
    Membre Expert

    Homme Profil pro
    Inscrit en
    Janvier 2004
    Messages
    1 249
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2004
    Messages : 1 249
    Par défaut
    ton algorithme est trop *simple*, il ne permet pas de gerer tout les cas.

    Tu remplis simplement toutes les cases pour ne pas faire d'incoherences, mais une case que tu as remplis 2 lignes au dessus s'avere fausse pour la résolution d'une colonne, tu n'a prévu AUCUN moyen de revenir sur ton choix. C'est pourquoi tu ne résouds pas tout.

    Il faut donc que tu fasse un algo qui te permet de REVENIR en arriere sur tes précédents choix pour les changer jusqu'a trouver le bon chiffre.

    (en imaginant un algo PAS DU TOUT optimisé, tu pourrais revenir sur le précédent choix de la colonne et incrémenter le chiffre, puis invalider tout le reste de la ligne. Mais il faut autoriser la possibilité de passer de 9 a 1 ce que tu algo ne fait pas en ce moment)

Discussions similaires

  1. [POO] [DEV] Classe de debug pour PHP
    Par -COil- dans le forum Langage
    Réponses: 11
    Dernier message: 09/06/2007, 19h53
  2. [POO] PB d'interprétation des '\n' (PHP Objet)
    Par Bobabar dans le forum Langage
    Réponses: 8
    Dernier message: 25/04/2006, 01h08
  3. [POO] débutante dans les objets COM
    Par SandraG dans le forum Langage
    Réponses: 11
    Dernier message: 16/03/2006, 12h03
  4. [POO] [Architecture]... d'un site en php-objet ?
    Par Pill_S dans le forum Langage
    Réponses: 13
    Dernier message: 13/02/2006, 14h05
  5. [débutant] choix de postgre avec php / migration
    Par bilbon.S dans le forum PostgreSQL
    Réponses: 3
    Dernier message: 23/03/2004, 14h05

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