Skip to content

Instantly share code, notes, and snippets.

@Ismael-VC
Last active November 13, 2021 12:46
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Ismael-VC/9aabd4ef91d8215e37332c61b58777f7 to your computer and use it in GitHub Desktop.
Save Ismael-VC/9aabd4ef91d8215e37332c61b58777f7 to your computer and use it in GitHub Desktop.
_
_ _ _(_)_ _ | Un nuevo enfoque para la computación técnica
(_) | (_) (_)| | | Documentación: http://docs.julialang.es.org
_ _ _| |_ ___| |_ __ _ | Tecleé "?ayuda" para la ayuda.
| | | | | | |/ _ \ __| _' | |
| | |_| | | | __/ || (_| | | Versión 1.0 (201?-??-?? ??:?? UTC)
_/ |\__'_|_|_|\___|_| \__'_| | Commit ??????? (? días detrás de master)
|__/ | x86_64-w64-mingw32
julieta> módulo NReinas
exportar solucionar
tipo Tablero
cols :: Ent
nodos :: Ent
diag45 :: Ent
diag135 :: Ent
soluciones :: Ent
Tablero() = nuevo(0, 0, 0, 0, 0)
fin
"Marca si está ocupada una casilla."
función marcar!(t::Tablero, k::Ent, j::Ent)
t.cols $= (1 << j)
t.diag135 $= (1 << (j + k))
t.diag45 $= (1 << (32 + j - k))
fin
"Prueba si una casilla está amenazada."
función probar(t::Tablero, k::Ent, j::Ent)
t.cols & (1 << j) +
t.diag135 & (1 << (j + k)) +
t.diag45 & (1 << (32 + j - k)) == 0
fin
"Solucionador de retroceso."
función solucionar!(t::Tablero, niv::Ent, dx::Ent)
si niv > 0
por i en 0:dx - 1
si probar(t, niv, i) == verdadero
marcar!(t, niv, i)
solucionar!(t, niv - 1, dx)
marcar!(t, niv, i)
fin
fin
sino
por i en 0:dx - 1
si probar(t, 0, i) == verdadero
t.soluciones += 1
fin
fin
fin
t.nodos += 1
t.soluciones
fin
"Soluciona el problema de las `N` reinas, en un tablero de $n × n$ casillas."
solucionar(n::Ent) = solucionar!(Tablero(), n - 1, n)
fin
julieta> usando NReinas
NReinas
julieta> solucionar(8)
92
julieta> @tiempo solucionar(15)
13.114574 segundos (6 asignaciones: 224 bytes)
2279184
ayuda?> solucionar
buscar: solucionar
Soluciona el problema de las N Reinas, en un tablero de n × n casillas.
julieta>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment