Está en la página 1de 9

SUDOKU

Daniel de la Casa Riballo M . del Roco Casco Muga


Estudiante Ing. Telecomunicacin Estudiante Ing. Telecomunicacin
Universidad Carlos III de Madrid Universidad Carlos III de Madrid
Avda. De la Universidad, 30 Avda. De la Universidad, 30
28911, Legans (Madrid-Espaa) 28911, Legans (Madrid-Espaa)

100066663@alumnos.uc3m.es 100074356@alumnos.uc3m.es

RESUMEN
El juego del Sudoku se presenta como un problema de El objetivo del Sudoku en su versin clsica, y ms popular, es
optimizacin que tiene una nica solucin. Se estudiarn sus rellenar una cuadrcula de 81 casillas, en 9 filas y 9 columnas,
orgenes y sus caractersticas, adems de la aplicacin de diversas divididas en cajas de 3x3, con los nmeros del 1 al 9. Al rellenar
tcnicas de resolucin de problemas y optimizacin. el Sudoku debemos conseguir que no se repita ningn nmero en
las filas, columnas y tampoco en las cajas de 3x3. Un Sudoku
estar bien planteado si su solucin es nica.
Categoras y Descriptores de Temas
Sin embargo, tambin podemos encontrar otras versiones de
[Java] Lenguaje de programacin.
Sudokus con diferentes restricciones, variantes respecto a la
colocacin de los bloques, e incluso utilizando conjuntos de
Trminos Generales elementos que no sean exclusivamente numricos.

Backtracking, Mtodo Humano, Bsqueda Aleatoria, Exact


Cover, Bsqueda Tab, Algoritmos Genticos.

Palabras Clave
Sudoku, Optimizacin, Resolucin de Problemas, Java.

1. INTRODUCCIN
El Sudoku es un juego que consiste en un tablero de R x C
casillas, donde R nota el nmero de filas y C el nmero de
columnas. El tablero est dividido en un nmero k de bloques de
tamao r x c (con r = y c = C ) en los que colocaremos r x c
elementos diferentes.

Figura 2 : Sudoku 9x9 en blanco, con bloques de 9 casillas


asimtricos.

Hay que tener en cuenta que los Sudokus vienen con un conjunto
de valores numricos ya incluidos, denominados pistas. Las pistas
no son colocadas en orden aleatorio. El nmero de pistas incluidas
inicialmente en el Sudoku nos determinar su nivel de dificultad.
Aunque la dificultad tambin est relacionada con el tiempo que
toma encontrar la solucin.
Figura 1 : Sudoku 9x9 en blanco, remarcando las 9 casillas
que forman un bloque.
1.1 Historia El concepto de cuadrados latinos se conoce desde los tiempos
El juego del Sudoku tiene sus orgenes en civilizaciones antiguas medievales, aparecieron con manuscritos rabes del siglo XIII.
como la china o la rabe. En estas civilizaciones existan unos Dicho cuadrado contiene celdas en el cual cada fila y cada
juegos denominados cuadrados mgicos a los que se les atribua columna tiene el mismo conjunto de smbolos, a diferencia del
propiedades especiales, siendo utilizados en los campos de la cuadrado mgico, en el cual no hay repeticin.
Astrologa y el Esoterismo.
En 1776 Euler mostraba como construir cuadrados mgicos con
El origen ms antiguo de los cuadrados mgicos se encuentra en un cierto nmero de celdas, en particular 9, 16, 25 y 36. Euler
una leyenda china, datada del ao 2200 a.C., la cual se puso en una rejilla letras en latn y lo llam cuadrado latino. Ms
denominaba Lo Shu. Dicho nombre significa hoja de ro, y la tarde aadi letras griegas y de ah que surgiera el cuadrado
leyenda cuenta que el emperador chino vio salir una gran tortuga greco-latino.
del ro Amarillo. La historia tena que ver con un sacrificio al dios
En sus ltimos aos Euler encontr el problema de combinar dos
del ro, ya que el rio se desbordaba e inundaba los campos
conjuntos de n smbolos de manera que en ninguna fila o columna
sembrados, perjudicando la economa del pas.
se repitieran una pareja de smbolos.

Otro ejemplo en el cual se muestra un cuadrado mgico de orden


4 es en la fachada de la Pasin del Templo Expiatorio de la
Sagrada Familia en Barcelona, diseada por el escultor Josep
Mara Subirachs.

La constante mgica del cuadrado es 33, la edad de Jesucristo en


la Pasin. Estructuralmente dos de los nmeros del cuadrado (el
12 y el 16) estn disminuidos en dos unidades (10 y 14) con lo
que aparecen repeticiones. Esto permite rebajar la constante
Figura 3: Representacin del caparazn de la tortuga y la mgica en 1.
equivalencia de cada uno de los nmeros que forman el
cuadrado mgico.

La tortuga en su caparazn tena pintados en forma de cuadrado


los nmeros del 1 al 9. Lo sorprendente era que el resultado de la
suma tanto en horizontal como en vertical era siempre el mismo.
En ese momento el emperador le dio una interpretacin mstica y
sagrada a la tortuga, la consideraba como un presagio para su
pas, ya que simbolizaba la longevidad y la proteccin.

Debido a este presagio el emperador empez a levantar palacios


con una distribucin en cuadrcula semejante a la encontrada en el
caparazn de la tortuga sagrada. La suma de los nmeros
coincida con el nmero de das que tiene cada uno de los 24
ciclos lunares del ao chino.

La idea del cuadrado mgico fue transmitida a los rabes por los
chinos. En la Enciclopedia del ao 990 realizada por un grupo de Figura 4: Cuadrado mgico en la fachada de la Sagrada
eruditos rabes muestra una lista de cuadrados de todos los Familia en Barcelona.
rdenes desde 3 a 9. En 1225 Ahmed al-Buni mostr como
construir cuadrados mgicos mediante una tcnica de bordeado. El Sudoku es en realidad un caso especial de los cuadrados
latinos. El Sudoku impone la restriccin adicional de que los
La primera aparicin del cuadrado mgico en la literatura islmica subgrupos de 3*3 deben contener tambin los dgitos del 1 al 9.
se da en el Jabirean Corpus. Este libro recomendaba los cuadrados Este tipo de rompecabezas se public por primera vez a finales de
mgicos como hechizos para facilitar el nacimiento de los nios. las dcadas de los 70 en la revista Math Puzzles and Logic
Dichos cuadrados consistan en 9 celdas con los nmeros del 1 al Problems de Dell Magazines. El nombre que dio Dell a este
9 ordenados con 5 en el centro de forma que el contenido de cada rompecabezas fue Number Place. Dell tom el concepto de
fila, columna y las dos diagonales sumaran 15. Los cuadrados Euler de cuadrado latino y lo aplic a una rejilla de 9*9 con la
mgicos pudieron ser introducidos en Europa a travs de Espaa adicin de 9 cajas, cada una de ellas contiene los nmeros del 1 al
durante el siglo XII. 9.
En 1984, Nikoli, la compaa lder en creacin de puzles de en el teletexto del Canal 4. La BBC Radio comenz a leer los
Japn descubri el Number place y decidi mostrarlo a los fans nmeros en voz alta en la primera versin radiofnica del Sudoku.
japoneses de los rompecabezas. En 1986, despus de aadir varias
mejoras, sobretodo creando patrones simtricos y reduciendo el La revista Teachers, financiada por el gobierno, recomienda el
nmero de pistas dadas, el Sudoku se convirti en uno de los Sudoku como un ejercicio mental en las clases y se ha insinuado
rompecabezas ms vendidos en Japn. que la resolucin de Sudokus puede ayudar a frenar la progresin
de enfermedades como el Alzheimer.
Cuando se dieron cuenta de que uno de los principales problemas
era el nombre tan largo que tena inicialmente Suuji Wa Dokushin El sudoku complet el crculo volviendo a Manhattan como un
Ni Kagiru (los nmeros deben existir slo una vez), el presidente elemento habitual del New York Post. La moda del Sudoku a
de Nikoli, lo abrevi a Sudoku (Su = nmero; Doku = nico, otras partes de EEUU cuando tanto el The Daily News como el
soltero). USA today lanzaron Sudokus el mismo da.

Dos aos despus, los japoneses introducen dos innovaciones que Hoy en da hay clubes de Sudoku, chats, libros de estrategia,
lleva el juego a una mayor popularidad en el pas del Sol vdeos, juegos para mviles, juegos de cartas, competiciones e
Naciente, el nmero de las cifras no puede pasar de 30 y las incluso un programa de televisin. El Sudoku ha aparecido en los
cuadrculas se hacen simtricas, es decir, que las cifras estn peridicos de todo el mundo y se le describe en los medios de
distribuidas de forma rotatoria y simtrica en las casillas, lo que todo el mundo como el cubo Rubik del siglo XXI y como el
concede al conjunto un aspecto ms esttico. rompecabezas que ms rpido ha crecido del mundo.

En 1997 Wayne Gould, juez neozelands, durante una visita a 2. RESOLUCIN DEL SUDOKU
Hong Kong lo descubri y prepar algunos Sudokus para el diario
MEDIANTE ALGORITMOS
britnico The Times.
El Sudoku tiene asociado dos problemas bsicos: la generacin de
tableros vlidos y la bsqueda de una solucin que lo solucione.
Respecto a la generacin de un tablero vlido, se dice que existen
dos alternativas, una de las cuales es mantener almacenados en
una base de datos un conjunto de tableros que se conocen de
antemano como vlidos y realizar una carga aleatoria de los
mismos. La segunda forma es desarrollar un algoritmo capaz de
generar los tableros por s mismos.

Pero en esta seccin nos vamos a centrar a la bsqueda de una


solucin, dicha solucin est demostrado que se trata de un
problema NP-completo, con lo cual no se ha descubierto hasta
hoy un algoritmo que le de solucin en un tiempo polinomial. Sin
embargo, el Sudoku se ha convertido en uno de los problemas
principales de estudio de los programadores, los cuales siguen
desarrollando formas de resolucin cada vez ms eficientes. A
continuacin explicaremos los ms conocidos.
Figura 5: Muestra de la fiebre del Sudoku que se vivi a
partir del ao 2005. 2.1 Tcnica Backtracking
El algoritmo implementado con esta tcnica se denomina en
Gould que cre un programa de ordenador que generaba Sudokus realidad Branch -&- Bound o ramificacin y poda, es uno de los
de diferentes niveles de dificultad, no peda dinero por los ms elogiados por los programadores debido a la velocidad con la
rompecabezas. El Times decidi darle una oportunidad y public que encuentra la respuesta. Sin embargo, para los investigadores
en 2004 su primer Sudoku. La publicacin de un Sudoku en el se trata del menos til a causa de su ineficiencia.
London Times fue solo el principio de un enorme fenmeno
que rpidamente se extendi por toda Gran Bretaa y pases como Dicha tcnica se basa en un algoritmo de bsqueda en el cual se
Australia y Nueva Zelanda. Tres das despus, el Daily Mail explora un rbol de soluciones en anchura o profundidad. Una de
empez a publicar Sudokus. El Daily Telegraph de Sydney los las alternativas de esta tcnica es la de emplearlo en su forma ms
sigui en 2005. primitiva, que es la de un algoritmo de fuerza bruta.

A finales de 2005 el rompecabezas se publicaba de forma regular En este caso el algoritmo se encargar de probar en cada casilla, y
en varios peridicos. Adems el Sudoku fue incluido diariamente a partir de una casilla inicial, cada uno de los valores disponibles,
analizando inmediatamente la validez de la decisin tomada. Si la
solucin parcial no satisface las condiciones de la Regla nica, el Si tenemos en cuenta que el conjunto de colores ser el de los
algoritmo retroceder (backtrack) al nivel de bsqueda anterior y valores que se utilizan para completar el Sudoku, el quid de esta
generar otro tablero, con el siguiente valor disponible ubicado en relacin radica en hallar una forma para representar el tablero
Sudoku con un grafo tal que cumpla las condiciones del problema
la posicin ltima de anlisis. Este proceso se repetir hasta
de coloreo. Sea V el conjunto de vrtices de nuestro grafo. Si
concretar el anlisis de la ltima casilla, con lo cual el costo consideramos = {(, ), 0 , 9} (es decir, tomamos cada
computacional ser de () , con n igual al nmero de casilla del tablero como un vrtice del grafo), podemos construir
valores posibles, R el nmero de filas, C el nmero de E (el conjunto de aristas o arcos) de acuerdo al siguiente
columnas y p el nmero de casillas con pista. A este costo se criterio: dos vrtices u y v estn unidos por un arco no dirigido
debe agregar, tambin, el de cada consulta de validez con lo cual (u,v) s y solo s u y v comparten la misma fila, columna o
bloque. En la siguiente figura se observa, para el Sudoku del
el nmero es extremamente grande.
ejemplo anterior, cmo queda conformado el subgrafo de vrtices
adyacentes para la casilla siguiendo el criterio enunciado.
Para determinados tableros, entonces, el algoritmo tardar mucho
tiempo, an con el hardware actual. La ventaja, sin embargo,
radica en que el algoritmo devolver, tarde o temprano, la
solucin esperada. En la siguiente figura mostramos el espacio de
soluciones para un pequeo Sudoku de ejemplo de 22 22
casillas, con = {1,2,3,4} .

Figura 7: Subgrafo creado a partir de las casillas relacionadas


con la (1,1). Se omitieron los vnculos entre todos los dems
vrtices por cuestiones de prolijidad.

Luego, dicho algoritmo debe solo recorrer el grafo obtenido


coloreando de forma vlida cada uno de los vrtices, a partir del
conjunto N de colores o de cifras del sudoku. En nuestro caso
no tendremos que encontrar el conjunto mnimo de colores, sino
buscar un coloreo vlido para el grafo. Como todo tablero Sudoku
debe admitir una y slo una posible solucin, queda asegurado
que si el tablero es vlido, el algoritmo devolver un resultado
satisfactorio en un tiempo exponencial, cuya expresin es una
funcin de la cantidad de vrtices que restan por colorear
Figura 6: Espacio de soluciones (acotado) para un tablero (cantidad de casillas vacas) y de la cantidad de colores
sudoku de 4 x 4 de ejemplo. Obsrvese que el algoritmo de disponibles (cantidad de valores con los que puede completarse
backtracking no expande los nodos que no son vlidos, y corta una casilla).
la bsqueda al encontrar la solucin.

Otro de los algoritmos basados en backtracking consiste en


2.2 Mtodo Humano
relacionar la bsqueda de una solucin a un tablero Sudoku con el Este mtodo de resolucin es muy interesante para utilizarse
csico problema de coloreo de grafos. Un grafo G = V, E es una algortmicamente, ya que permite deducir cmo el usuario podra
estructura formada por un conjunto de vrtices V y un conjunto resolver un Sudoku por su cuenta.
de aristas o arcos E que los unen. El problema de coloreo de
grafos es un problema NP, y consiste en hallar la cantidad mnima En la revista NAW se publicaron siete reglas bsicas para el
de colores necesarios para colorear cada vrtice del grafo, desarrollo del anlisis humano. Entre ellas, una de las ms simples
teniendo en cuenta que dos vrtices adyacentes (unidos entre s y utilizadas baby steps que dice que cuando se conocen ocho
por un arco) no pueden ser coloreados de la misma forma. cifras de una misma fila, columna o bloque, el dgito restante es el
que ocupa la ltima casilla libre. Otra de las reglas es singles la
cual expresa que cuando hay un solo lugar por elementos dado en La relacin entre la resolucin de Sudokus y el problema de
una columna, fila o bloque, o cuando hay solo un dgito que puede Exact Cover se basa en definiciones de conjuntos y en trminos
ir en un bloque dado, escribirlo all. Por ltimo otra de las reglas matemticos.
es pair markup que dice que si en una casilla pueden ir dos o
ms valores posibles, escribirlos como subndices de tal forma
que puedan realizarse los anlisis correspondientes en el resto del 2.5 Bsqueda Tab
Sudoku, si se produce una contradiccin al considerar uno de los La Bsqueda Tab es una tcnica de optimizacin combinatoria
dgitos, entonces se detendr el anlisis de ese y probar con que utiliza conceptos de memoria adaptativa y exploracin
alguno de los restantes. sensible. La exploracin sensible de Bsqueda Tab se basa en la
idea de que una mala decisin tomada por una estrategia produce
Esta demostrado que siguiendo estos tres pasos ms los otros
cuatro de una complejidad mayor puede encontrarse la solucin a ms informacin que una buena seleccin realizada de forma
cualquier Sudoku. La dificultad que presenta este algoritmo es aleatoria. Implementa una estrategia de bsqueda local para
que su complejidad temporal es muy difcil de calcular con explorar de forma eficiente el espacio entorno una configuracin.
exactitud, puesto que los pasos deben ejecutarse en un orden Cada solucin tiene asociado un conjunto de vecinos. Con esta
lineal y, cuando se utiliza el mtodo de nivel inferior, deben estructura se permite pasar a la mejor opcin vecina, o si ya
repetirse todos los anteriores. estamos en la mejor vamos a la menos peor, donde se aplica de
nuevo bsqueda local sobre la nueva vecindad en busca del
Por este motivo la solucin de algunos tableros se alcanza en
tiempos mnimos, mientras que para otros el anlisis puede ser ptimo. En cada paso deben analizarse todos los vecinos (al
mucho ms largo. Por ltimo podemos afirmar que la eficiencia menos un conjunto grande de ellos), por lo que es un mtodo de
del algoritmo depender de la estrategia utilizada para la alto coste computacional.
codificacin de los pasos. Este mtodo se utiliza para calcular la
dificultad de los Sudokus que se publican en libros y revistas para La configuracin inicial se genera rellenando cada columna con
su resolucin a mano. los nmeros faltantes, de forma que no se repitan los nmeros en
ninguna columna. Esta configuracin inicial no cumplir
2.3 Bsqueda Aleatoria normalmente con la condicin de las filas y de los subcuadros.
La bsqueda aleatoria es otro de los mtodos que pueden seguirse
para encontrar el resultado de un Sudoku. La estrategia consiste El vecindario para una configuracin se define segn las
en primero, comenzar aleatoriamente colocando nmeros en las siguientes estrategias:
casillas vacas del tablero, y calcular luego el nmero de errores
cometidos. Despus de esto se intercambian los nmeros 1) Cambiar un nmero repetido en una columna por un
insertados a lo largo del tablero hasta que la cantidad de errores se nmero que no est en esa columna.
reduzca a cero. Cuando se llegue a esto, se habr llegado a la 2) Cambiar un nmero repetido en una fila por un nmero
solucin. que no se encuentre en esa fila.
3) Cambiar un nmero repetido en un subcuadrado por
La ventaja de este mtodo, es que el tablero no tiene que ser otro que no aparezca en ese subcuadro.
soluble lgicamente para que el algoritmo pueda resolverse. Es 4) Intercambiar en una misma columna los nmeros de dos
decir, que los tableros con los que se prueba el algoritmo no celdas.
deben ser especialmente construidos de tal forma que se provean 5) Intercambiar en una misma fila los nmeros de dos
suficientes pistas al usuario como para completarlo usando lgica celdas.
encadenada solamente. Dicho mtodo es el menos usado, debido a
que trata de una bsqueda nada sistemtica y con bastante azar. En lugar de evaluar la funcin objetivo recorriendo el cuadro
completamente para analizar el nmero de repeticiones por filas,
2.4 Exact Cover columnas o subcuadros, se realiza una estimacin de la variacin
El Sudoku puede describirse en trminos de un caso particular del de la funcin objetivo para un vecino partiendo de la funcin
problema de Exact Cover, o recubrimiento exacto. Este mtodo objetivo de la configuracin actual, ahorrando en tiempo
es un problema NP completo que consiste en, dado un universo de computacional. La estimacin de la funcin objetivo se realiza de
elementos y una coleccin de subconjunto, hallar una acuerdo al tipo de variacin hecha para llegar a la configuracin
subcoleccin tal que cada elemento est exactamente en un vecina.
conjunto.
2.6 Algoritmos Genticos
Por tratarse de un problema que no se resuelve en un tiempo Los algoritmos genticos son una tcnica de bsqueda a travs del
polinomial, pueden plantearse soluciones por aproximacin o espacio de soluciones del problema (configuraciones).
definirse un algoritmo de backtracking que le de respuesta. Como Inicialmente fue idealizado usando los mecanismos de la
alternativa a estas dos opciones el Dr. Donald Knuth public un evolucin de la gentica natural.
algoritmo que recibe el nombre de Dancing Links que resuelve Este algoritmo inicia con la seleccin de una poblacin inicial.
el problema de Exact Cover, obviamente en un tiempo Despus, realiza un proceso de seleccin entre las configuraciones
exponencial. para permitirles participar en la generacin de nuevos
descendientes, para despus formar parejas para ser sometidas a
un proceso de recombinacin. Finalmente se realiza un proceso de 4) Proceso de seleccin: Es proporcional y realizado mediante el
mutacin que altera los elementos de algunas configuraciones. mtodo de la ruleta. Para ello se utiliza una funcin de
Este proceso tiene como finalidad generar diversidad en la adaptacin que garantiza selectividad y transforma el valor de
poblacin y est controlado por un parmetro llamado tasa de funcin objetivo original de minimizacin a maximizacin.
mutacin que determina cuantos cambios se realizarn sobre la = max( 0 ) 0
poblacin. Tras finalizar este proceso obtenemos los elementos de Donde:
la nueva generacin. : Funcin de adaptacin del individuo i-simo.

0 : Vector funcin objetivo de los individuos.
El buen desempeo del algoritmo depende de la seleccin : Tasa de adaptacin (k>1).
adecuada de los parmetros de control (tamao de la poblacin
inicial, tasa de recombinacin y de mutacin) y la forma en la que 5) Proceso de recombinacin: Se realiza de tal manera que se
se realiza la seleccin, recombinacin y mutacin. El algoritmo conservan las mejores caractersticas de las soluciones
aplicado a l Sudoku consta de las siguientes etapas: anteriores. Como el proceso de la poblacin se mantiene
constante, cada pareja de padres tendr dos hijos: el primero
1) Codificacin del problema: Cada configuracin del problema
tendr los mejores subcuadros de los dos progenitores
es una matriz con nmeros entre el 1 y 9. En nuestra
(aquellos que tienen menos repeticiones) y el segundo tendr
representacin, cada individuo o cromosoma se representa
las mejores filas o columnas de los dos, seleccionando
con un array de 9 genes de 9 elementos cada uno. Cada gen es
aleatoriamente con la misma probabilidad de ocurrencia.
una fila del tablero.
6) Proceso de mutacin: Se realiza para generar diversidad. La
solucin es nica y debe explorarse adecuadamente el espacio
de soluciones. Se pueden realizar cuatro tipos de mutaciones:
intercambio de dos elementos en una fila, intercambio de dos
elementos en una columna, intercambio de dos elementos en
un subcuadro y reemplazo de un nmero de individuo por otro
nmero generado de forma aleatoria entre 1 y 9.

Figura 8: Codificacin del problema

2) Poblacin inicial: Las posiciones fijas del tablero se


mantienen como estn, pero las posiciones vacas se
representan como 0. Se genera de forma aleatoria para cada
celda en blanco del problema un nmero entre 1 y 9 sin
generar elementos repetidos dentro de una fila (gen). El
proceso se repetir para cada configuracin de la poblacin.

3) Clculo de la funcin objetivo: Debe reflejar la cantidad de


nmeros que se repiten por fila, columna y subcuadro. Esto se Figura 10: Ejemplo de mutaciones
realiza de forma ms eficiente determinando qu nmeros
faltan en cada fila columna o subcuadro. Adems, para no perder el rastro de bsqueda, si en la poblacin
nueva no hay un individuo mejor o igual a la incumbente, se
reemplaza el peor individuo de la poblacin por la mejor solucin
encontrada. En caso de no encontrar solucin, el proceso para
cuando un nmero predefinido de iteraciones se alcanza.

3. ALGORITMO DE BACKTRACKING
PARA EL SUDOKU EN JAVA
Con el algoritmo backtracking implementamos una tcnica de
resolucin de problemas mediante una bsqueda sistemtica de
soluciones.
Figura 9: Nmeros que faltan en cada fila, cada
columna y cada subcuadro.
Para optimizar el backtracking se descompone cada tarea en
tareas parciales y se prueba de manera sistemtica cada una de if(esPosibleInsertar(tablero,i,j,k)){
estas subtareas.
tablero[i][j]=k;
Cuando al elegir una tarea comprobamos que no lleva a una
boolean b=resolver(tablero);
solucin, volvemos hacia atrs y probamos con una nueva. if(b){
El siguiente fragmento de cdigo Java comprueba utilizando return true;
backtracking si a travs de una serie de pistas podemos obtener }
una solucin de un Sudoku, o si no existe solucin para esas
pistas. tablero[i][j]=0;
}
public class Sudoku { }
return false;
public static final int DIMENSION =9; }
}
public static void main(String[] args){ System.out.println("Encontrada solucin:");
int[][] tablero= new int[][] { imprimir(tablero);
{0,7,0, 0,0,0, 0,8,0}, return true;
{0,5,0, 6,0,0, 0,0,1}, }
{0,0,3, 1,4,0, 0,0,0},
{9,0,6, 0,5,0, 3,0,0}, public static boolean esPosibleInsertar(int [][] tablero,
{0,0,0, 0,0,0, 0,0,0}, int i, int j, int valor){
{0,0,5, 0,2,0, 1,0,7}, //Comprueba columna
{0,0,0, 0,6,5, 7,0,0}, for(int a=0; a<DIMENSION; a++){
{3,0,0, 0,0,1, 9,2,0}, if(a!=i &&tablero[a][j]==valor){
{0,4,0, 0,0,0, 0,1,0}, return false;
}; }
imprimir(tablero);
if(!resolver(tablero)){ }
System.out.println("El Sudoku no //Comprueba fila
tiene solucin"); for(int a=0; a<DIMENSION; a++){
} if(a!=j &&tablero[i][a]==valor){
} return false;
}
public static void imprimir(int[][] tablero){ }
for(int i=0;i<DIMENSION;i++){ //Comprueba cuadardo
if(i%3==0){ int y= (i/3)*3;
System.out.println(); int x= (j/3)*3;
for(int a=0; a<DIMENSION/3;a++){
} for(int
for(int j=0; j<DIMENSION;j++){ b=0;b<DIMENSION/3;b++){
if(j%3==0){ if(a!=i
&&b!=j&&tablero[y+a][x+b]==valor){
System.out.print(" "); return false;
} }
}
System.out.print(tablero[i][j]); }
} return true;
System.out.println(); }
} }

public static boolean resolver(int[][] tablero){


for(int i=0; i<DIMENSION; i++){
for(int j=0; j<DIMENSION; j++){
if(tablero[i][j]!=0){
continue;
}
for(int k=1;k<=9;k++){
Utilizando este ejemplo, obtenemos como resultado la solucin 4. CONCLUSIONES
del Sudoku:
Se planteo el Sudoku, como un problema de optimizacin que
presenta caractersticas de alta complejidad matemtica, como la
presencia de una solucin nica y se propone un modelo
matemtico.

La estrategia de bsqueda local que implementa Bsqueda Tab


permite salir de configuraciones que tienen pocas repeticiones
pero en las que pequeos cambios muestran un empeoramiento en
la solucin (ptimo locales). Al prohibir movimientos en celdas
modificadas recientemente se consigue escapar de esos ptimos
locales.

El proceso de cruzamiento empleado por el algoritmo gentico, da


prioridad a las mejores configuraciones y extrae sus mejores
atributos para generar la nueva poblacin. Este comportamiento
hace que el mtodo no se desve y siempre trate de mejorar la
solucin durante el proceso de bsqueda.

El sudoku tiene solucin nica, lo que significa que no se


consideran soluciones vlidas los tableros con situaciones
cercanas a la solucin. En este sentido, el Sudoku no parece un
Figura 10: Solucin del Sudoku en Java mediante problema adecuado para resolver utilizando un algoritmo
backtracking. gentico; pero si es un problema muy til para experimentar con
diferentes operadores genticos sobre permutaciones, dado su alto
Podemos comprobar un ejemplo en el cual no obtengamos grado de dificultad.
solucin para el Sudoku. Para ello, modificamos en el cdigo el
tablero, obteniendo la siguiente solucin: Los algoritmos de backtracking se caracterizan por permitirnos
obtener la solucin a todo problema de satisfaccin de
restricciones o de optimizacin. El costo computacional, sin
embargo, est acotado en O ( ), con n representando la cantidad
de hijos de cada nodo y k la cantidad de niveles del espacio de
soluciones.

Como se ha dicho antes, nuestros tableros sudokus estn formados


por 81 casillas, y hasta hoy se han descubierto sudokus que
pueden ser resueltos por el ser humano si tienen un mnimo de 17
pistas. Si consideramos que n es la cantidad de casillas
modificables de un tablero y que k representa la cantidad de
valores posibles que pueden ocupar una celda, el costo final de un
algoritmo de backtracking sin poda es O (98117 ) = O (964 ).

Ahora bien, las podas implementadas en nuestro algoritmo de


backtracking nos permiten reducir la complejidad temporal
significativamente, de acuerdo a un criterio que depende de forma
exclusiva de las caractersticas de los tableros. Esto es, cuanto
mayor sea la densidad de pistas en las primeras celdas del sudoku,
el nmero de iteraciones se disminuir. De la misma forma, si los
primeros valores de la solucin son altos y no estn dados como
pistas, el nmero de iteraciones necesarias se incrementar.

Figura 11: Sudoku sin solucin implementado en Java


mediante backtracking.
5. REFERENCIAS
[1] Historia de los Cuadrados Mgicos
http://www.portalplanetasedna.com.ar/cuadrados_magicos3.htm

[2] Los Cuadrados Mgicos


http://eloviparo.wordpress.com/2010/04/19/los-cuadrados-
magicos/

[3] Historia del Sudoku


http://www.playsudoku.biz/historia-sudoku.aspx

[4] Historia del Sudoku


http://www.articles3k.com/es/405/28951/La-historia-de-Sudoku/

[5] Historia del Cuadrado Mgico de la Sagrada Familia


http://es.wikipedia.org/wiki/Cuadrado_m%C3%A1gico#El_cuadr
ado_m.C3.A1gico_de_la_Sagrada_Familia

[6] Hal 9000 contra los Sudokus Mutantes


http://www.linux-magazine.es/issue/13/Sudokus.pdf

[7] Algoritmos de Backtracking


http://ocw.uc3m.es/ingenieria-
informatica/programacion/transparencias/tema7.pdf

[8] Algoritmo Gentico


http://www.cesfelipesegundo.com/revista/articulos2007b/Articulo
sudoku.pdf

[9] Wikipedia. Sudoku.


http://en.wikipedia.org/wiki/Sudoku.

[10] Enumerating possible Sudoku grids


www.afjarvis.staff.shef.ac.uk/sudoku/sudoku.pdf

[11] Conceptos matemticos del Sudoku


http://en.wikipedia.org/wiki/Mathematics_of_Sudoku

[12] Algoritmos para resolver Sudokus


http://en.wikipedia.org/wiki/Algorithmics_of_Sudoku

También podría gustarte