0% encontró este documento útil (0 votos)
14 vistas4 páginas

Programa

El documento presenta un programa en Java que resuelve el problema de las N reinas utilizando un enfoque de backtracking. Permite al usuario ingresar un valor entre 1 y 8 para determinar el tamaño del tablero y el número de reinas. El programa verifica la validez de la entrada y muestra la solución si existe, o indica que no se encontró solución.
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
14 vistas4 páginas

Programa

El documento presenta un programa en Java que resuelve el problema de las N reinas utilizando un enfoque de backtracking. Permite al usuario ingresar un valor entre 1 y 8 para determinar el tamaño del tablero y el número de reinas. El programa verifica la validez de la entrada y muestra la solución si existe, o indica que no se encontró solución.
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd

import java.util.

Scanner;

public class NReinas {

public static void main(String[] args) {

Scanner scanner = new Scanner(System.in);

int n;

while (true) {

try {

System.out.print("Ingrese el valor de N (máximo 8) para el problema de las N


reinas: ");

n = scanner.nextInt();

if (n > 0 && n <= 8) {

break;

} else {

System.out.println("N debe ser un entero positivo entre 1 y 8.");

} catch (java.util.InputMismatchException e) {

System.out.println("Entrada inválida. Ingrese un número entero.");

scanner.next(); // Limpiar el buffer del scanner

resolverNReinas(n);

/**
* Resuelve el problema de las N reinas y muestra la solución.

* @param n Número de reinas y tamaño del tablero (NxN).

*/

public static void resolverNReinas(int n) {

int[] tablero = new int[n];

if (!colocarReinas(tablero, 0, n)) {

System.out.println("No se encontró ninguna solución.");

/**

* Función recursiva para colocar las reinas en el tablero utilizando backtracking.

* @param tablero Arreglo que representa el tablero de ajedrez.

* @param fila Fila actual en la que se intenta colocar una reina.

* @param n Número total de reinas y tamaño del tablero.

* @return true si se encontró una solución, false en caso contrario.

*/

private static boolean colocarReinas(int[] tablero, int fila, int n) {

if (fila == n) {

mostrarTablero(tablero, n);

return true; // Encontró una solución

for (int columna = 0; columna < n; columna++) {

if (esSeguro(tablero, fila, columna, n)) {

tablero[fila] = columna;
if (colocarReinas(tablero, fila + 1, n)) {

return true; // Propaga la solución hacia arriba

// Backtrack: si no se encuentra solución, se deshace la asignación

return false; // No se encontró solución en esta rama

/**

* Verifica si es seguro colocar una reina en la posición dada.

* @param tablero Arreglo que representa el tablero de ajedrez.

* @param fila Fila en la que se intenta colocar la reina.

* @param columna Columna en la que se intenta colocar la reina.

* @param n Número total de reinas y tamaño del tablero.

* @return true si es seguro colocar la reina, false en caso contrario.

*/

private static boolean esSeguro(int[] tablero, int fila, int columna, int n) {

for (int i = 0; i < fila; i++) {

// Verifica columna y diagonales

if (tablero[i] == columna || Math.abs(tablero[i] - columna) == fila - i) {

return false;

return true;

}
/**

* Muestra el tablero de ajedrez con las reinas colocadas.

* @param tablero Arreglo que representa el tablero de ajedrez.

* @param n Número total de reinas y tamaño del tablero.

*/

private static void mostrarTablero(int[] tablero, int n) {

for (int i = 0; i < n; i++) {

for (int j = 0; j < n; j++) {

System.out.print(tablero[i] == j ? "Q " : ". ");

System.out.println();

// Separador

for (int i = 0; i < 2 * n - 1; i++) {

System.out.print("-");

System.out.println();

También podría gustarte