begin process at 2008 05 16 20:50:05
1 173 724 membres
533 nouveaux aujourd'hui
13 972 membres club

Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum.
Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : Aide pour passage de cpp a Flash pour solveur sudoku [ Archives / Divers ] (hereticos)

Aide pour passage de cpp a Flash pour solveur sudoku le 28/04/2006 17:04:14

hereticos

Bonjour,

J'ai déjà un fait un générateur de grille sudoku, qui prenant en parametre une grille avec "x" trou et "x" chiffre d'après une grille trouvée dans des magasine spécialisée, fait subir des permutations au  niveua des lignes, colonnes et carrés pour en arriver à une nouvelle grille.

Mon problème c'est que j'aimerai également intégrer un solveur de sudoku pour ce genre de grille c'est à dire en pouvant passez en parametre par exemple un tableau 1 dimension contenant:

    5,0,0,0,0,2,9,1,0,
    0,0,0,0,9,0,0,2,3,
    0,9,1,0,3,4,8,0,0,
    6,0,0,0,0,1,0,0,0,
    4,3,0,7,6,9,0,8,5,
    0,0,0,2,0,0,0,0,7,
    0,0,5,9,2,0,6,3,0,
    3,2,0,0,5,0,0,0,0,
    0,7,9,6,0,0,0,0,2

Un solveur en cpp conviendrai parfaitement à ce cas, or je n'arrive pas à le passer correctement en flash:

le cpp ( pas de moi):

void val()                // Fonction qui crée une grille
{   
    for (int lin = 0 ; lin < size ; lin++)                      // Balyage de toutes les colonnes
        for (int col = 0 ; col < size ; col++)                  // Balyage de toutes les lignes 
            if (!Grille[col][lin])                              // Dès qu'une case est vide (=0)
            {
                for (int nb = 1 ; nb <= size ; nb++)            // On essaye tous les nombres
                {
                    if(!Col[nb-1][col] && !Lin[nb-1][lin])      // S'il n'est pas déjà mis dans la colonne
                    {                                           // ou dans la ligne, on essaye.
                        int sq = (col/3)+(lin/3)*3;             // Calcul du carré dans lequel on se trouve
                       if (!Sq[nb-1][sq])                       // Si le nombre n'est pas encore mis, on essaye
                        {
                            Grille[col][lin] = nb;              // On met le nombre
                            Col[nb-1][col] = true;              // On indique qu'on l'a mis dans la colonne
                            Lin[nb-1][lin] = true;              // On indique qu'on l'a mis dans la ligne
                            Sq[nb-1][sq] = true;                // On indique qu'on l'a mis dans le carré
                            if (col != size-1 && lin != size-1)       
{           
                                MakeGrille();      
}
             // On passe au nombre suivant via la même fonction
                            Col[nb-1][col] = false;             // On vire le chiffre de la colonne
                            Lin[nb-1][lin] = false;            // on vire le chiffre de la ligne
                            Sq[nb-1][sq] = false;              // On vire le chiffre du carré
                            Grille[col][lin] = 0;              // On éfface le nombre de la grille pour en essayer un autre
                        }
                    }
                }
                return; // une fois toutes les possibilités essayées, on retourne en arrière
            }           // Donc à la fonction MakeGrille précédente qui pourra essayer le nombre suivant

    return;            // Retour à la fonction précédente
}       


ma tentative flash:


function valider()
{   

 for (var colx = 0 ; colx < 9; linx++)                 
 {
  trace("in1");
        for (var linx = 0 ; linx < 9 ; linx++)                
{
   trace("in2");
            if (Grille[colx][linx]==0)                          
            {
    trace("in3");
                for (var nb = 1 ; nb <=9 ; nb++)          
                {
                    if(Col[nb-1][colx]==false && Lin[nb-1][linx]==false)     
                    {  
      trace("in3.5");
     
                        var sqx = int((colx/3)+(linx/3)*3);
  
                       if (Sq[nb-1][sqx]==false)                                              {
      trace("in4");
      trace(nb);
                            Grille[colx][linx] = nb;            
                            Col[nb-1][colx] = true;              
                            Lin[nb-1][linx] = true;         
                            Sq[nb-1][sqx] = true;  
        Grille2[colx][linx] =nb;
       
                            if (colx != 8 && linx != 8)
       {
       
             _root.valider(); 
       }
                            
       Col[nb-1][colx] = false;             
                            Lin[nb-1][linx] = false;          
                            Sq[nb-1][sqx] = false;              
                            Grille[colx][linx] = 0;              
                        }
                    }
     
     
                }
    
    return;
}
    
  }
 return;
  
 }


Au final au lieu de me traiter toute la grille, il ne me traite que la premiere ligne...
J'ai fait pas mal de tentative d'aptation infructeuse. Il me sort la grille suivante (étant sensée être résolvée):



grille permutée

6,9,7,0,5,8,4,0,3,0,0,2,0,7,0,0,0,0,0,1,0,0,0,0,6,0,0,3,4,0,8,0,0,0,1,9,9,0,0,0,3,2,0,0,0,0,2,0,9,0,1,5,0,0,0,0,6,0,2,0,0,9,7,5,0,0,0,0,0,3,0,2,2,0,9,6,0,3,0,5,0
 
grille resolvée, sensée l'être:p

6,9,7,2,5,8,4,2,3,0,0,2,0,7,0,0,0,0,0,1,0,0,0,0,6,0,0,3,4,0,8,0,0,0,1,9,9,0,0,0,3,2,0,0,0,0,2,0,9,0,1,5,0,0,0,0,6,0,2,0,0,9,7,5,0,0,0,0,0,3,0,2,2,0,9,6,0,3,0,5,0

j'espère que vous pourrez m'aider; je vous en serai grés!

merci d'avance et a bientot:)

PS: toute les variables et tableau sont correctement initialisées, ca n'e provient pas de ca, c'est dans le traitement même peut être a cause des return...?



Classé sous : grille, col, nb, lin, colx

Participer à cet échange

Appels d'offres

Pub



CalendriCode

Mai 2008
LMMJVSD
   1234
567891011
12131415161718
19202122232425
262728293031 

VS Express FR Gratuit !

VS Express en français et 100% gratuit !

Téléchargements

Logiciels à télécharger sur le même thème :

Boutique

Boutique de goodies CodeS-SourceS