Prolog - Problema de sudoku

 
Vista:

Problema de sudoku

Publicado por highflow (1 intervención) el 17/01/2006 10:15:10
Hola a todos,

tengo un problema puntual en prolog y no sé como solucionarlo.Intentaré explicarme lo mas correctamente posible:

- Tenemos una matriz de N x N con números ( de 1 a N ) en su interior "rollo sudoku" (en filas y columnas no se pueden repetir numeros)

Disponemos de num_inicial y num_final en cada fila y columna que nos dicen cuantos numeros "se ven" desde allí. Ejemplo práctico:

Imaginaos que esto es para cada fila ( con numeros distintos obviamente):

Matriz = 4 x 4
num_inicial =3
num_final = 2

Resultado de la fila en la matriz: 1 2 4 3

De forma que: el num_inicial nos indica que "se ven" 3 numeros desde esa posicion ( el 4 "tapa" el 3 del final) y desde num_final se ven solo 2 numeros ( el 4 "tapa" el 1 y el 2 iniciales )
num_inicial --> 1 2 4 3 <-- num_final

Un número "tapa" a otro si este es mayor ( 4 tapa a 3,2,1 ,etc...)

La pregunta es:

- Quiero sacar un procedimiento en Prolog que , dados un num_inicial,un num_final y dados LOS NUMEROS DE LA FILA me compruebe si el resultado ( orden ) de los numeros en la fila es correcto.

He pensado en que ( sabiendo la relacion de orden de los numeros) :

1<2<3<4<5<...<N

podemos calcular si el primer número de la fila (X) es mayor ( o no ) que el siguiente ( Y)
pero como algunos de los casos tienen varias opciones no se me ocurre el procedimiento correcto ( de forma recursiva y que haga backtraking) :

Ejemplo:

Dado un num_inicial = 3 todas estas soluciones se cumplen:

1 2 4 3
2 3 4 1
1 3 4 2

Alguna idea?

Gracias
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Problema de sudoku

Publicado por marcel (1 intervención) el 17/04/2006 16:10:44
podes aplicar sucesivamente 2 reglas..:

regla1: si una casilla tiene un candidato unico, entonces lo agrego.
regla2: si una casilla tiene un candidato que no es candidato para ninguna otra casilla de la fila, columna, o region, agrego este candidato...

luego podrias hacer otras reglas.. para mejorarlo aun...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar