Inscription / Connexion Nouveau Sujet
Niveau algorithmique
Partager :

Algorithmes de résolution - Java

Posté par
janou789
08-06-11 à 03:13

Bonjour,

J'ai commencé un cours en programmation Java par correspondance, j'ai de la difficulté à commencer, vous pouvez m'éclairer S.V.P.
Je dois élaborer les algorithmes des trois niveaux de difficultés (débutant, moyen et expert) de résolution de sudoku.
Et écrire le pseudo code de la technique de résolution niveau expert.

Par quoi je dois commencer
Merci de votre aide

Posté par
janou789
Algorithmes de résolution - Java 09-06-11 à 14:16

Bonsoir à tous, voici ce par quoi j'ai commencé suis-je vers une bonne solution???


Algorithmes de résolution

Débutant
------------------
|. . .| 7.1 |. . .|
|1. . |. . .|. . .|
|.9 5 |. 3 8|. . .|
------------------
| 9 8.|. . . |. . 6|
|. . .| 6 4 7|8 . .|
|. . .|. . . | . .2|
-----------------
|. 1 .|. 5 4 |6 . .|
|6 7 .|8 . . |9 . .|
|. . .|2 . . |. . 1|
------------------

Moyen
---------------
|. 6 8|. . .| 4 .5 |
|. . .|. . .|. . . |
|7 . .|. 1 4|. . 9 |
-----------------
|. . .|. . 1| 7 . .|
|. 1 .|6. . | 2 . .|
|6 . .|. . .| 3 . .|
------------------
|. . .|. 3 .| . 2 .|
|.3 5 |. 2. | . . 6|
|. 4 .|. . 5| . . .|
------------------

Expert
---------------
|38 .  |. . 2|. 4 .|
|7 . . |8 . 1|9 . .|
| . . .|5 . .|. . .|
-------------------
|1 2 . |6 4 .|. 8. |
| . . .|. . .|. 1 .|
| . . .|1 . 3|7 . .|
-------------------
|. . . | . ..|4 . .|
|. 1 5 |. . .|6 . .|
|8 . 7 | . . |. . 9|
--------------------


Résolution expert

|3 8 6 | 7 9 2| 5 4 1|
|7 5 4 | 8 3 1| 9 6 2|
|2 9 1 | 5 6 4| 8 7 3|
--------------------
|1 2 9 | 6 4 7| 3 8 5|
|6 7 3 | 9 8 5| 2 1 4|
|5 4 8 | 1 2 3| 7 9 6|
--------------------
|9 6 2 | 3 1 8| 4 5 7|
|4 1 5 | 2 7 9| 6 3 8|
|8 3 7 | 4 5 6| 1 2 9|
------------------

Pseudo code niveau expert ?

J'ai encore besoin d'aide pour le reste...si le début est bon!

Merci

Posté par
Oleo
re : Algorithmes de résolution - Java 11-06-11 à 19:25

Salut !
Je comprends pas bien ce que tu dois faire en fait.
En fait j'avais l'impression de comprendre jusqu'à ton deuxième post

As-tu une structure de données pour le sudoku ? As-tu une base pour ton code ?

Je m'y connais pas trop en Sudoku, il y'a une autre différence entre les niveaux (facile, moyen, ...) que le nombre de cases laissées vide, par exemple les techniques à utiliser ?
T'as un énoncé plus complet non ?

Posté par
janou789
Algorithmes de résolution - Java 12-06-11 à 15:10

Bonjour,

C'est surment moi qui est dans le champ, en fait pour le moment je n'ai pas de structure de données pour le sudoku ni de base.

J'ai débuté avec ce que je pensais dans le deuxième poste , mais sans être certaine de rien.

J'ai seulement ceci comme information pour faire l'exercise:

(Je dois élaborer les algorithmes des trois niveaux de difficultés (débutant, moyen et expert) de résolution de sudoku. Et écrire le pseudo code de la technique de résolution niveau expert.)

Merci

Posté par
Oleo
re : Algorithmes de résolution - Java 12-06-11 à 16:03

J'ai un peu du mal à comprendre ce que tu veux faire en fait, tu parles de résolution et tu affiches des grilles, je comprends pas trop le rapport en fait …

Posté par
mjmaheux
pseudo code et algorithme 13-06-11 à 06:48

Allo  janou789

J'ai le même problème que toi à résoudre, tu en es rendu ou ??

Posté par
didou123
algorithme java sudoku 13-06-11 à 13:15

Bonjour,
Je suis dans le meme cours que toi janou789
L'exercice nous demande de se référer à la leçon 2 où les techniques de résolutions de Sudoku sont expliquées :
Je recopie le texte pour toi ici



Les techniques de résolution par ordre croissant de difficultés (débutant, moyen, expert) de SUDOKU peuvent apparaître comme suit :

Les techniques de résolution de niveau débutant

sur une ligne : lorsqu'une ligne ne comporte plus qu'une seule case vide, cette case doit forcément contenir le seul chiffre non présent dans la ligne;
sur une colonne : lorsqu'une colonne ne comporte plus qu'une seule case vide, cette case doit forcément contenir le seul chiffre non présent dans la colonne;
dans un carré : lorsqu'un un carré ne comporte plus qu'une seule case vide, cette case doit forcément contenir le seul chiffre non présent dans le carré.


Les techniques de résolution de niveau moyen

sur un ensemble de trois : pour chaque ensemble de trois carrés alignés horizontalement ou verticalement, chaque chiffre ne doit apparaître qu'une seule fois par carré et par ligne, ou par carré et par colonne; pour chaque chiffre, cette technique doit être appliquée pour chaque ensemble horizontal de trois carrés puis pour chaque ensemble vertical de trois carrés;
sur un ensemble de trois carrés horizontaux : dans un ensemble de trois carrés alignés horizontalement, lorsque la partie d'une ligne à l'intérieur d'un carré est remplie de chiffres différents du chiffre considéré, un des deux autres carrés horizontaux contient forcément le chiffre considéré;
sur un ensemble de trois carrés verticaux : dans un ensemble de trois carrés alignés verticalement, lorsque la portion d'une colonne à l'intérieur d'un carré est remplie de chiffres différents du chiffre considéré, un des deux autres carrés verticaux contient forcément le chiffre considéré.


Les techniques de résolution de niveau expert

l'intersection : chaque case est à l'intersection d'une ligne et d'une colonne, par conséquent, chaque case vide ne peut contenir qu'un chiffre non présent dans sa ligne et dans sa colonne; cette technique doit être appliquée à chaque case vide;
la paire exclusive : lorsque deux cases vides d'une même ligne, d'une même colonne ou d'un même carré ne peuvent contenir que deux mêmes chiffres, alors les autres cases vides de cette ligne, de cette colonne ou de ce carré ne peuvent pas contenir ces deux chiffres.


Il me semble donc évident que l'algorithme doive inclure les techniques mentionnées ci-haut.
Donc ton post #2 est à côté de la plaque.
Je n'ai pas encore trouvé de solution moi-même à cet exercice.
Par contre j'espère que ce post t'aidera.
@+

Posté par
mjmaheux
algorithme Sudoku 13-06-11 à 13:49

Bonjour didou123 et janou789

Nous avons tous les 3 le même cours

Dans ce TP2 il me reste juste le # 4 à faire et j'ai rien trouvé encore.

Je commence aujourd'hui le TP3.

On pourrait travailler ensemble car j'ai une 4e personne de mon côté qui fait le cours aussi

Posté par
janou789
Algorithmes de résolution - Java 13-06-11 à 16:43

Bonjour a vous deux didou123 et mjmaheux,

J'ai essayé de comprendre cette question en allant sur différent site d'information et c'est ce qui en résulte au poste 2.

Mais justement je ne suis certaine de rien et je ne comprend pas très bien cette question moi non plus , il me reste seulement moi aussi cette question #4 pour le TP2.

Très heureuse de pouvoir travaillé avec vous si vous le désirer.
Peût-être arriverons nous à comprendre!

A+

Merci

Posté par
didou123
resolution tp2 13-06-11 à 17:19

Bonjour,

Ce que je comprend du problème 4, c'est kek chose du genre pour le niveau débutant :

La grille[9][9] de sudoku est placée en variable globale */ void resolution ( ) {int ligne = 0 , colonne = 0 ; int chiffre_test = 1 ... 9) pour les tester ensuite selon la ligne, colonne et le petit carre 3x3

Ca fait-tu du sens ce que j'écris?

Est-ce qu'il y a des experts en maths/java svp qui pourraient nous assister pcq sur le net y a pas grand chose à ce sujet!!! et C un peu frustrant surtout quand le tuteur explique pas bien.

Merci mjmaheux et janou789 de votre aide

Posté par
Bachstelze
re : Algorithmes de résolution - Java 15-06-11 à 10:42

Salut

J'ai fait un code en Python pour implémenter la méthode "expert". Ça devrait être assez clair, mais n'hésitez pas à demander si vous ne comprenez pas un truc.



Citation :
firas@aoba ~ % python3 sudoku.py        
380002040
700801900
000500000
120640080
000000010
000103700
000000400
015000600
807000009

386792541
754831962
291564873
129647385
673985214
548123796
962318457
415279638
837456129

Posté par
janou789
Algorithmes de résolution - Java 18-06-11 à 15:23

Bonjour,


Alors c'est un code comme j'ai fais dans mon deuxième poste excepté que je dois mettre des zéros au-lieu de points ?

Merci

Posté par
Bachstelze
re : Algorithmes de résolution - Java 18-06-11 à 15:26

Tu peux mettre des points si tu veux. L'affichage, ce n'est pas important, c'est la méthode de résolution qui l'est. :p

Posté par
mutkas10
TP2, problème 4 08-11-11 à 08:54

Mes amis, c'est un plaisir de retrouver des personnes suivant le même cours que moi.
Avez vous trouvez l'astuce pour le problème 4 du TP2 ? Je ne comprend pas très bien. Merci de m'aider....

Posté par
Bachstelze
re : Algorithmes de résolution - Java 08-11-11 à 19:18

Mince, mon pastebin a expiré. Je le referai quand j'aurai le temps...

Posté par
MaryPe
TP2, problème 4 13-03-12 à 02:35

Avez-vous réussi a faire le TP, je prends le même cours 2012, le même TP, les mêmes problèmes

Posté par
mzd0
re : Algorithmes de résolution - Java 15-08-12 à 21:25

Bonjour,
Je suis présentement inscrit au même cours que vous et moi aussi et je suis bloqué à la question 4.
Est-ce que quelqu'un peut m'aider à débuter ?
Merci

Posté par
saidaoba
demande d'AIde en algorithme de résolution Sudoku en java 09-03-13 à 07:24

bonjour les amis,
Moi aussi, je me suis inscrite au même cours et je me suis coincée à la quatrième question du tp2,
J'ai fait tous les questions sauf la 4eme je ne sais pas d'ou commencer à vrai dire je n'ai pas arrivé meme à le comprendre malgré mes recherches sur internet mais en vain.
Je serai très reconnaissante si quelqu'un pourra m'aider?
Merci d'avance

Posté par
Eric1
re : Algorithmes de résolution - Java 29-04-13 à 19:46

Bonjour

Je prends comme structure un tableau à double entrée d'entier, et comme convention que 0 est un champs non renseigné dans ce tableau

l'algo de résolution facile devrait être:

--

boolean continuer = true;
int[][] sudoku; //qu'on suppose déja initialisé

while(continuer) //tant qu'on a trouvé un chiffre, on recommencer à chercher, sinon on s'arrête
{
continuer=false;
for(int i=0;i<9;i++) //ici le test sur les lignes et les colonnes
{
  int nbCaseVideColonne=0;
  int nbCaseVideRangee=0;
  int valeurTotaleColonne=0;
  int valeurTotaleRangee=0;
  int valeurColonne=0;
  int valeurRangee=0;
  for(int j=0;j<9;j++)
  {
    if(sudoku[i][j]==0)
    {
      nbCaseVideColonne++;
      valeurColonne=j;
    }
   if(sudoku[j][i]==0)
    {  
      nbCaseVideRangee++;
      valeurRangee++;
    }
   valeurTotaleColonne+=sudoku[i][j];
   valeurTotaleRangee+=sudoku[j][i];
  }
  if(nbCaseVideColonne==1) //une seule case vide dans la colonne
  {
    continuer=true;
    sudoku[i][valeurColonne]=45-valeurTotaleColonne; //45: somme d'une ligne complete
  }
if(nbCaseVideRangee==1) //une seule case vide dans la rangée
  {
    continuer=true;
    sudoku[valeurRangee][i]=45-valeurTotaleRangee;
  }
}
for(int i=0;i<3;i++) //ici le test sur les carrés (grand carré colonne)
{
for(int j=0;j<3;j++)  //grand carré rangée
  {
   int nbCaseVide=0;
   int valeurTotale=0;
   int valeurColonne=0;
   int valeurrangee=0;
   for(int k=0;k<3;k++) //case dans un carré
   {
    for(int l=0;l<3;l++} //case vesticale dans un carré
    {
       if(sudoku[3*i+k][3*j+l]==0)
       {
        nbCaseVide++;
        valeurColonne=3*i+k;
        valeurRangee=3*j+l;
       }
      valeurTotale+=sudoku[3*i+k][3*j+l];
    }
   }
   if(nbCaseVide==1) //une seule case vide dans le carré
   {
    continuer=true;
    sudoku[valeurColonne][valeurRangee]=45-valeurTotaleColonne;
   }
  }
}
}

Ca doit etre un truc semblable à cela.
Note: j'ai mélangé le test sur les colonnes et rangées pour ne faire qu'une seule fois la double boucle de 1 à 9



Vous devez être membre accéder à ce service...

Pas encore inscrit ?

1 compte par personne, multi-compte interdit !

Ou identifiez-vous :


Rester sur la page

Désolé, votre version d'Internet Explorer est plus que périmée ! Merci de le mettre à jour ou de télécharger Firefox ou Google Chrome pour utiliser le site. Votre ordinateur vous remerciera !