Sudoku et Matlab
Répondre à la discussion
Affichage des résultats 1 à 6 sur 6

Sudoku et Matlab



  1. #1
    invite75b3a58d

    Sudoku et Matlab


    ------

    Bonjour, j'essaye de creer un générateur de sudoku en ce moment sur matlab.

    Cependant, je me heurte à un problème, je voudrais pouvoir inverser les lignes et colonnes par bloc de 3 (de la ligne 1 à 3 4 à 6 etc...) pour pouvoir modifier ma matrice de base (et donc en faire une nouvelle pour l'utilisateur).

    J'ai défini une matrice "originalsudoku", que je souhaite en gros modifier puis mettre des chiffres à 0 et l'afficher pour l'utilisateur.

    J'arrive à generer un nombre au hasard entre 1 et 100 (floor(100*rand)) histoire de faire les permutations un assez grand nombre de fois (pour jamais avoir la même matrice), mais je ne vois pas quoi faire en suite.

    Je dois aussi faire une fonction qui "cache les nombres" par des 0, j'ai écrit ça :

    Code:
    cnombre=6 % le nombre de chiffre à cacher par ligne 
    for j=1:9; 
    for i=1:cnombre; 
    lhasard=floor(9*rand); 
    if lhasard==plhasard; 
    lhasard=floor(9*rand); 
    originalsudoku(j,lhasard)=0; 
    plhasard=lhasard ; 
    end 
    end
    Mais ça ne marche pas sur originalsudoku

    Si quelqu'un pouvait m'aider ><
    Merci !

    -----
    Dernière modification par yoda1234 ; 19/05/2010 à 06h15.

  2. #2
    invitea29b3af3

    Re : Sudoku et Matlab

    Salut
    inverser les lignes et colonnes par bloc de 3
    Je vois pas exactement ce que tu veux dire, là...
    Si par exemple tu voulais faire ça sur la matrice 9x9 suivante, ça donnerait quoi?
    abcdefghi
    jklmnopqr
    stuvwxyz0
    123456789
    ABCDEFGHI
    JKLMNOPQR
    STUVWXYZ9
    876543210
    ééé$$$ààà

  3. #3
    invite75b3a58d

    Re : Sudoku et Matlab

    J'avoue ne pas avoir été très clair sur ce point...
    En fait, j'aimerai que les permutations respectes les contraintes du sudoku, pour ça, il faut permuter les lignes entre la 1 et la 3, la 4 et 6, la 7 et la 9, pour pas se retrouver avec plusieurs même chiffres dans la même grille. Pour ton exemple, cela donnerait :

    stuvwxyz0
    abcdefghi
    jklmnopqr
    123456789
    JKLMNOPQR
    ABCDEFGHI
    876543210
    STUVWXYZ9
    ééé$$$ààà

    Mais bien entendu, c'est moi qui ait choisi quelle ligne a permuté avec quelle ligne. Je pensais générer deux nombre au hasard entre 1 et 3, 4 et 6, 7 et 9 et d'inverser les lignes qui ont le numéro qui correspond.

    Le mieux serait que j'arrive à faire la même chose avec les colonnes, mais ça à l'air encore plus compliqué ^^"

  4. #4
    invite895675d5

    Re : Sudoku et Matlab

    Un avis (qui n'est peut-être pas bon vu que je ne connais pas tout ton programme) :
    tu ne devrais pas modifier ta matrice originalsudoku mais créé une matrice affichage qui serait une copie de ta matrice originalsudoku une fois mélangée ou tu aurais remplacé certains chiffre par des 0. Ensuite tu vérifies par rapport à ta matrice mélangée.
    (encore une fois, c'est juste un avis vu que je ne connais pas tout ton programme).
    Concernant le mélange des lignes et des colonnes, tu vas vite rencontrer un problème :
    il va falloir faire une procédure de vérification des 9 carrés 3X3. Car même si les règles du sudoku seront vérifier pour les lignes et les colonnes, ce ne sera pas le cas pour les carrés.

  5. A voir en vidéo sur Futura
  6. #5
    invite75b3a58d

    Re : Sudoku et Matlab

    Justement, si on modifie dans les matrices 3x3, les règles seront logiquement toujours respectées, puisqu'on permute des lignes de 1,2...9 à chaque fois, le contenu du bloc reste de 1à9.

    Par contre pour la matrice modifiée, je suis d'accord, c'était comme ça dans l'algo que j'imaginais, la matrice finale étant une matrice nommée "tampend" en utilisant des valeurs tampon entre chaque modification.

  7. #6
    invitea29b3af3

    Re : Sudoku et Matlab

    Salut
    Soit par exemple la matrice A
    A=[1 1 1 1 1 1 1 1 1;
    2 2 2 2 2 2 2 2 2;
    3 3 3 3 3 3 3 3 3;
    4 4 4 4 4 4 4 4 4;
    5 5 5 5 5 5 5 5 5;
    6 6 6 6 6 6 6 6 6;
    7 7 7 7 7 7 7 7 7;
    8 8 8 8 8 8 8 8 8;
    9 9 9 9 9 9 9 9 9];

    A =

    1 1 1 1 1 1 1 1 1
    2 2 2 2 2 2 2 2 2
    3 3 3 3 3 3 3 3 3
    4 4 4 4 4 4 4 4 4
    5 5 5 5 5 5 5 5 5
    6 6 6 6 6 6 6 6 6
    7 7 7 7 7 7 7 7 7
    8 8 8 8 8 8 8 8 8
    9 9 9 9 9 9 9 9 9
    Si tu veux inverser les lignes 1 et 3 par exemple tu fais:
    temp=A(1,:);
    A(1,:)=A(3,:);
    A(3,:)=temp;
    Avec les colonnes c'est pareil tu fais simplement:
    temp=A(:,1);
    A(:,1)=A(:,3);
    A(:,3)=temp;
    C'est ça que tu voulais?

Discussions similaires

  1. Sudoku
    Par invitedbbba468 dans le forum Mathématiques du supérieur
    Réponses: 2
    Dernier message: 06/02/2009, 03h45
  2. Les challenges du Sudoku
    Par invite06fcc10b dans le forum Science ludique : la science en s'amusant
    Réponses: 5
    Dernier message: 16/11/2006, 09h43
  3. Sudoku
    Par invitec526837a dans le forum Mathématiques du collège et du lycée
    Réponses: 2
    Dernier message: 27/06/2006, 12h56
  4. sudoku & dénombrement
    Par invite6de5f0ac dans le forum Mathématiques du supérieur
    Réponses: 19
    Dernier message: 22/02/2006, 17h03
  5. Vous connaissez le Sudoku? A la recherche de l'algorythme du Sudoku!!!
    Par invite95786954 dans le forum Mathématiques du supérieur
    Réponses: 17
    Dernier message: 02/01/2006, 09h57
Dans la rubrique Tech de Futura, découvrez nos comparatifs produits sur l'informatique et les technologies : imprimantes laser couleur, casques audio, chaises gamer...