Arturo Vela·All in One

Dev & Builder

Slide puzzle 3×3

Configuración

A* suele ser más rápido; BFS también es óptimo pero puede explorar muchos más estados. En 4×4 se fuerza A*.
En modo diagonal se permite mover fichas también en diagonal hacia el vacío.
Usa números 0..8. El 0 es el vacío.
Usa números 0..8. El 0 es el vacío.
Paridad inv. inicial0
Paridad inv. objetivo0
¿Soluble?

Revela la solución gradualmente.

Permite que el usuario haga sus movimientos.

Resultados

Ingresa inicial y objetivo, luego ejecuta.

Top 5 - Menos movimientos

Sin récords aún

Minijuego (movimientos del usuario)
Movimientos0
EstadoEn progreso
Regla: solo puedes mover fichas adyacentes al vacío. El 0 es vacío y no se mueve como ficha.
Secuencia completa de pasos
Aún no hay resultados.
Detalle del algoritmo (1–5)
1) Determinar los objetos del sistema
  • Tablero: matriz 3×3 representada como board[9] con valores 0..8.
  • Fichas: números 1..8.
  • Vacío: valor 0.
  • Estado: una configuración completa del tablero + posición del vacío.
  • Operadores: mover el vacío U, D, L, R internamente (swap de 0 con una ficha adyacente). En la explicación, lo que se mueve es la ficha hacia el vacío.
  • Solver: A* (heurístico) que calcula la ruta mínima hacia la meta.
  • Web Worker: ejecuta el solver en segundo plano para no bloquear la UI.
2) Definir estados del problema
Estado inicial
1 2 3
4 5 6
7 0 8
Notación: { (0,0)=1, (0,1)=2, (0,2)=3, (1,0)=4, (1,1)=5, (1,2)=6, (2,0)=7, (2,1)=0, (2,2)=8 }
Estado meta (resultado)
1 2 3
4 5 6
7 8 0
Notación: { (0,0)=1, (0,1)=2, (0,2)=3, (1,0)=4, (1,1)=5, (1,2)=6, (2,0)=7, (2,1)=8, (2,2)=0 }
Identificador de estado: "v0,v1,...,v8". Existen (3²)! configuraciones, pero solo una parte es alcanzable según la paridad.
3) Reglas
  • Solo se mueve una ficha si está adyacente al vacío.
  • El vacío (0) no se mueve como pieza: la acción válida es deslizar una ficha hacia el vacío (internamente es un swap con 0).
  • Victoria cuando el tablero actual es exactamente igual al estado meta.
  • Solubilidad (3×3): debe cumplirse paridad(inversiones(inicial)) = paridad(inversiones(meta)).
  • Optimalidad: A* (Manhattan admisible) ⇒ mínimo # de movimientos.
4) El cuadrado / casilla
type Casilla = { fila: 0|1|2; columna: 0|1|2; valor: 0..8; // 0 = vacío esVacia(): boolean; vecinos(): Casilla[]; // arriba/abajo/izq/der si existen }
Para resolver, se calculan vecinos por coordenadas. La “casilla” es el modelo conceptual (como tu cuadro del puzzle).
5) Paso a paso (según los números que ingreses)
Ejecuta “Resolver (óptimo)” para generar el paso a paso.
Tabla: Estado inicial - Regla - Condición - Estado final
Estado inicialReglaCondiciónEstado final
(x, y)Mover ficha de arriba al vacíox > 0(x-1, y)
(x, y)Mover ficha de abajo al vacíox < 2(x+1, y)
(x, y)Mover ficha de la izquierda al vacíoy > 0(x, y-1)
(x, y)Mover ficha de la derecha al vacíoy < 2(x, y+1)
Ejecuta “Resolver” para generar la tabla detallada por movimientos.
Nota: Se usa A* con heurística Manhattan (admisible), por lo que la solución es óptima (mínimo número de movimientos).