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

Sudoku et Matlab



  1. #1
    Kaal245

    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. Publicité
  3. #2
    fiatlux

    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
    ééé$$$ààà
    La pie niche-t-elle haut ? Oui, la pie niche haut.

  4. #3
    Kaal245

    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é ^^"

  5. #4
    bzh_nicolas

    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.

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

    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.

  8. #6
    fiatlux

    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?
    La pie niche-t-elle haut ? Oui, la pie niche haut.

  9. Publicité

Discussions similaires

  1. Sudoku
    Par rapporteur dans le forum Mathématiques du supérieur
    Réponses: 2
    Dernier message: 06/02/2009, 03h45
  2. Les challenges du Sudoku
    Par Argyre dans le forum Science ludique : la science en s'amusant
    Réponses: 5
    Dernier message: 16/11/2006, 09h43
  3. Sudoku
    Par pruno_d_agen 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 fderwelt 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 jubano dans le forum Mathématiques du supérieur
    Réponses: 17
    Dernier message: 02/01/2006, 09h57
Découvrez nos comparatifs produits sur l'informatique et les technologies.