📄 algo.java
字号:
package sudoku;import java.util.ArrayList;import java.util.Iterator;import java.util.HashMap;public class Algo { public class Tentative { public Case _carreau; public ArrayList _values; public int _value; public Tentative(Case carreau,int value) { _carreau = carreau; _values = new ArrayList(); _values.add(new Integer(value)); _value = value; } public String toString() { return new String("Tentative carreau : "+_carreau.getRow()+" "+_carreau.getColumn()+" valeur = "+_value); } } ArrayList _listeTentative; int isAuHasard; static Algo _algo = null; private Algo() { _listeTentative = new ArrayList(); } public void init() { isAuHasard = 0; _listeTentative.clear(); } static public Algo getInstance() { if(_algo == null) _algo = new Algo(); return _algo; } int tryAlgoOtherCase(ArrayList tableau, int niveau, int sizeLine, int sizeColumn) { int result = 0; ArrayList choix = new ArrayList(); for(int k=0;k<sizeLine*sizeColumn;k++) { Integer valeur = new Integer(k); choix.add(valeur); } // boucle sur les tableaux while(choix.size() > 0) { double random = Math.random(); random*=choix.size(); int index = (int)Math.floor(random); Integer newValue = (Integer)choix.remove(index); Tableau tab = (Tableau)tableau.get(newValue.intValue()); // boucle sur les cases for(int j=0;j<sizeLine*sizeColumn*sizeLine*sizeColumn;j++) { Case carreau = (Case) tab.getCase(j); if(carreau.testOtherCase(niveau)) result++; } } return result; } int tryAlgoDeBase(ArrayList tableau, int sizeLine, int sizeColumn) { boolean result = true; int boucle = 0; ArrayList choix = new ArrayList(); while(result) { boucle++; result = false; for(int k=0;k<sizeLine*sizeColumn;k++) { Integer valeur = new Integer(k); choix.add(valeur); } // boucle sur les tableaux while(choix.size() > 0) { double random = Math.random(); random*=choix.size(); int index = (int)Math.floor(random); Integer newValue = (Integer)choix.remove(index); Tableau tab = (Tableau)tableau.get(newValue.intValue()); // boucle sur les cases for(int j=0;j<sizeLine*sizeColumn*sizeLine*sizeColumn;j++) { Case carreau = (Case) tab.getCase(j); result = carreau.update() || result; } } result = verifGlobale(tableau,sizeLine,sizeColumn) || result; } return boucle; } private boolean verifGlobale(ArrayList tableau, int sizeLine, int sizeColumn) { boolean result = false; // boucle sur les tableaux for(int i=0;i<sizeLine*sizeColumn;i++) { Tableau tab = (Tableau)tableau.get(i); // boucle sur les cases for(int j=0;j<sizeLine*sizeColumn*sizeLine*sizeColumn;j++) { Case carreau = (Case) tab.getCase(j); if(! carreau.isLock()) result = carreau.tryLock() || result; } } return result; } int tryAlgoMiniRangees(ArrayList tableau, int sizeLine, int sizeColumn) { int result = 0; // boucle sur les tableaux ArrayList choix = new ArrayList(); for(int k=0;k<sizeLine*sizeColumn;k++) { Integer valeur = new Integer(k); choix.add(valeur); } // boucle sur les tableaux while(choix.size() > 0) { double random = Math.random(); random*=choix.size(); int index = (int)Math.floor(random); Integer newValue = (Integer)choix.remove(index); Tableau tab = (Tableau)tableau.get(newValue.intValue()); // boucle sur les lignes for(int j=0;j<tab.getNbLignes();j++) { Rangee ligne = (Rangee) tab.getLigne(j); if(ligne.verifMiniRangees()) result++; } // boucle sur les colonnes for(int j=0;j<tab.getNbColonnes();j++) { Rangee colonne = (Rangee) tab.getColonne(j); if(colonne.verifMiniRangees()) result++; } // boucle sur les carres for(int j=0;j<tab.getNbCarres();j++) { Carre carre = (Carre) tab.getCarre(j); if(carre.verifMiniLignes()) result++; if(carre.verifMiniColonnes()) result++; } } return result; } int tryAlgoNUplesVisibles(int uples, ArrayList tableau) { int result = 0; // r閏up閞ation du 1er tableau Tableau tab = (Tableau)tableau.get(0); // boucle sur les lignes for(int j=0;j<tab.getNbLignes();j++) { Rangee ligne = tab.getLigne(j); if(verifNUplesVisibles(ligne.getCases(),uples)) result++; } // boucle sur les colonnes for(int j=0;j<tab.getNbColonnes();j++) { Rangee colonne = tab.getColonne(j); if(verifNUplesVisibles(colonne.getCases(),uples)) result++; } // boucle sur les carres for(int j=0;j<tab.getNbCarres();j++) { Carre carre = tab.getCarre(j); if(verifNUplesVisibles(carre.getCases(),uples)) result++; } // boucle sur les diagonales for(int j=0;j<tab.getNbDiagonales();j++) { Diagonale diagonale = tab.getDiagonale(j); if(verifNUplesVisibles(diagonale.getCases(),uples)) result++; } return result; } int tryAlgoNUplesCaches(int uples, ArrayList tableau, int sizeLine, int sizeColumn) { int result = 0; // r閏up閞ation du 1er tableau Tableau tab = (Tableau)tableau.get(0); // boucle sur les lignes for(int j=0;j<tab.getNbLignes();j++) { Rangee ligne = tab.getLigne(j); if(verifNUplesCaches(ligne.getCases(),uples,sizeLine,sizeColumn)) result++; } // boucle sur les colonnes for(int j=0;j<tab.getNbColonnes();j++) { Rangee colonne = tab.getColonne(j); if(verifNUplesCaches(colonne.getCases(),uples,sizeLine,sizeColumn)) result++; } // boucle sur les carres for(int j=0;j<tab.getNbCarres();j++) { Carre carre = tab.getCarre(j); if(verifNUplesCaches(carre.getCases(),uples,sizeLine,sizeColumn)) result++; } // boucle sur les diagonales for(int j=0;j<tab.getNbDiagonales();j++) { Diagonale diagonale = tab.getDiagonale(j); if(verifNUplesCaches(diagonale.getCases(),uples,sizeLine,sizeColumn)) result++; } return result; } private boolean verifNUplesVisibles(ArrayList cases, int uples) { boolean result = false; // map stocke pour chaque case la liste des chiffres qu'il poss鑔e HashMap map = new HashMap(); // map qui dit pour un Integer donn
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -