rendered paste bodypackage sudokuka;
import javax.swing.JFrame;
import javax.swing.JTextField;
import javax.swing.JOptionPane;
import java.util.ArrayList;
public class Resolution
{
public int[] values;
public int[] solution;
/** Creates a new instance of Resolution */
public Resolution(JTextField[][] grilleTT)
{
values = new int[81];
solution = new int[81];
int compteur=0;
for (int i=0;i<9;i++)
{
for (int j=0;j<9;j++)
{
try
{
this.values[compteur]=Integer.parseInt(grilleTT[i][j].getText());
compteur++;
}
catch(Exception e)
{
this.values[compteur] = 0;
compteur++;
}
}
}
}
protected void afficher (int [] vecteur)
{
for (int i=0; i<81; i++)
{
System.out.print (vecteur[i]);
}
}
protected int index_debut_ligne (int nombre)
{
return (nombre - (nombre%9));
}
protected int index_debut_colonne (int nombre)
{
return(nombre%9);
}
protected int index_debut_bloc (int nombre)
{
return((27*(ligne(nombre)/3))+(3*(colonne(nombre)/3)));
}
protected int ligne (int nombre)
{
return (nombre/9);
}
protected int colonne (int nombre)
{
return(nombre%9);
}
protected boolean ok_ligne (int[] grille, int cible, int debut)
{
int temp1;
temp1 = index_debut_ligne(debut);
for (int i=temp1;i<temp1+9;i++)
{
if (grille[i]==cible)
{
System.out.println("Test OK_ligne avec "+cible+" comme cible sur la case"+ i + "... cible rencontrée." + cible);
return false;
}
}
return true;
}
protected boolean ok_colonne (int[] grille, int cible, int debut)
{
int temp1;
temp1 = index_debut_colonne(debut);
for (int i=temp1;i<temp1+81;i=i+9)
{
if (grille[i]==cible)
{
System.out.println("Test OK_colonne avec "+cible+" comme cible sur la case"+ i + "... cible rencontrée." + cible);
return false;
}
}
return true;
}
protected boolean ok_bloc (int[] grille, int cible, int debut)
{
int temp1;
temp1=index_debut_bloc(debut);
for (int i=0;i<3;i++)
{
for (int j=0;j<3;j++)
{
if (grille[temp1+(9*i)+j]==cible)
{
System.out.println("Test OK_bloc avec "+cible+" comme cible sur la case"+(temp1+(9*i)+j)+ "... cible rencontrée." + cible);
return false;
}
}
}
return true;
}
protected boolean ok (int[] grille, int cible, int debut)
{
if (debut==81) return false;
else return (ok_ligne(grille,cible, debut) && ok_colonne(grille,cible, debut) && ok_bloc(grille,cible, debut));
}
protected int suivant (int[] grille, int cible)
{
int temp1;
temp1=cible;
while (grille[temp1] != 0)
{
if (temp1<80) temp1++;
else return 81;
}
return temp1;
}
protected ArrayList index_fixes (int[] grille)
{
ArrayList monArray = new ArrayList();
for (int i=0;i<81;i++)
{
if (grille[i]>0) monArray.add(i);
}
return (monArray);
}
protected void solution (int[] grille, JFrame fenetre)
{
int index=0;
int valeur=0;
ArrayList monArray = new ArrayList();
monArray = index_fixes(grille);
for (int i=0; i<81;i++)
{
this.solution[i]=this.values[i];
}
while (index < 81)
{
index=suivant(grille,index);
valeur++;
System.out.println("La valeur d'index :" + index + " Test de la valeur : " + valeur);
// this.afficher(this.values);
if (ok(grille,valeur,index))
{
grille[index]=valeur;
valeur=0;
}
else
{
if (valeur==9)
{
System.out.println("La valeur d'index A :" + index + " Test de la valeur : " + valeur);
valeur=0;
grille[index]=0;
index=index-1;
while (grille[index]==9)
{
valeur=0;
grille[index]=0;
index=index-1;
}
System.out.println("La valeur d'index B :" + index + " Test de la valeur : " + valeur);
while (valeurDansArray(index,monArray))
{
index=index-1;
System.out.println("La valeur d'index C :" + index + " Test de la valeur : " + valeur);
}
if (index<0)
{
JOptionPane.showMessageDialog(fenetre, "Aucune solution possible", "Pas de solution", JOptionPane.ERROR_MESSAGE);
return;
}
System.out.println("La valeur grille[index] :" + grille[index]);
if (grille[index]<9)
{
System.out.println("La valeur d'index D :" + index + " Test de la valeur : " + valeur);
valeur=grille[index];
grille[index]=0;
System.out.println("La valeur d'index E :" + index + " Test de la valeur : " + valeur);
System.out.println("Je sors par le break");
// break;
}
}
}
}
}
private boolean valeurDansArray(int valeur, ArrayList aarray)
{
for (int i=0; i<aarray.size();i++)
{
if (valeur==aarray.get(i)) return true;
}
return false;
}
}