8 reasens problema c ++

8 reasens problema c ++
C ++ se puede usar para resolver problemas muy complejos pero interesantes programados. Uno de esos problemas cruciales en C ++ es el problema de N-Queens, donde "n" representa el número total de reinas en el tablero de ajedrez. Ahora, es posible que se pregunte cuál es realmente este problema y cómo puede resolverlo con C++. Podrá encontrar las respuestas a estas preguntas después de pasar por este artículo.

¿Cuál es el problema de 8 reinas en c?++?

El problema del N-Queens o 8 reinas se refiere a la situación en la que desea colocar el número dado de reinas en un tablero de ajedrez de una manera que ninguna reina puede ser atacada por otra vertical, horizontal o diagonalmente,.mi., Todas las reinas deben colocarse de manera tan inteligente que ninguno de ellos pueda ser atacado por el otro de ninguna manera.

Cómo resolver el problema de 8 reinas en C ++ en Ubuntu 20.04?

En este segmento, compartiremos con usted el procedimiento de resolver el problema de las 8 reinas en C++. Para lograr este objetivo, hemos diseñado un código C ++ que se muestra en la imagen a continuación. Sin embargo, antes de continuar explicando este código, nos gustaría compartir con usted que hemos desglosado este código en pequeños fragmentos para su fácil comprensión. Hemos dividido aproximadamente este programa C ++ en una función para imprimir todos los diferentes estados del tablero de ajedrez que satisface la solución del problema de las 8 reinas, una función para verificar si una posición particular es segura para colocar la reina o no, una función para Resolver el problema de las 8 reinas utilizando el algoritmo de retroceso de retroceso y, finalmente, la función principal del controlador. Discutiremos todos estos fragmentos uno por uno.

En el primer fragmento de nuestro código, después de incluir la biblioteca y el espacio de nombres, hemos definido un tablero de ajedrez de tamaño 10 x 10 en forma de una matriz 2D. Significa que nuestro programa será capaz de tomar 10 reinas 'al máximo para resolver el problema de N-Queens en C++. Sin embargo, en este artículo, nos preocupa principalmente el problema de las 8 reinas. Después de definir el tablero de ajedrez, tenemos nuestra función de "placa de imprenta" que toma un número entero "n" como entrada que se refiere al número de reinas, yo.mi., 8 En este caso particular. Dentro de esta función, tenemos un bucle "para" anidado para simplemente imprimir el tablero de ajedrez en el terminal cada vez que se llama a esta función. Luego, tenemos algunas declaraciones "Cout" para imprimir espacios adecuados entre los diferentes estados del tablero de ajedrez resuelto.

En el segundo fragmento de nuestro código C ++, tenemos la función "issafe" que está ahí para verificar si será seguro colocar a una reina en una posición particular o no. Por "seguro" queremos decir que ninguna otra reina puede atacar a una reina particular vertical, horizontalmente o diagonalmente. Luego, tenemos tres bucles independientes "para" dentro de esta función que están allí para verificar las tres condiciones por separado. Si alguna de estas condiciones se vuelve verdadera, entonces la función "issafe" devolverá "falso" porque en estos casos, siempre habrá una posibilidad de ataque, por lo cual no podremos colocar a una reina en la posición particular. Sin embargo, si todas estas condiciones se vuelven falsas,.mi., No hay posibilidad de atacar en esa posición verticalmente, horizontalmente o diagonalmente, solo entonces la función "issafe" devolverá "verdadero" I.mi., Será seguro colocar a una reina en la posición particular.

En el tercer fragmento de nuestro código C ++, tenemos la función "Solución" que ideará la solución del problema de N-Queens utilizando el algoritmo de retroceso de retroceso. Dentro de esta función, la primera declaración "if" se usa para verificar si el número de reina es igual al número total de reinas o no. Si esta declaración se evalúa como verdadera, entonces se llamará instantáneamente a la función "Printboard". De lo contrario, se definirá una variable booleana, se definirá cuyo estado inicial se mantenga "falso". Luego, tenemos otro bucle "para" dentro del cual llamamos iterativamente la función "issafe" para cada una de las reinas para averiguar si la posición dada es segura para colocarla o no. Dentro de esta condición, hemos utilizado la recursión para realizar el retroceso para colocar las reinas en las posiciones más seguras para que no puedan ser atacados por ninguna otra reina. Aquí, "1" representará que una reina se coloca en una posición particular, mientras que "0" representará todas las posiciones vacías del tablero de ajedrez. Finalmente, hemos devuelto la variable "resultado" para notificar si la solución al número dado de reinas es posible o no.

En el último fragmento de nuestro código C ++, tenemos la función principal del controlador. La razón detrás del uso de las dos primeras declaraciones dentro de nuestra función "Main ()" es la optimización del rendimiento porque, para un mayor número de reinas, su programa podría ejecutarse irrazonablemente más lento. Sin embargo, puedes omitirlos si lo deseas. Luego, hemos definido un entero "n" que corresponde al número de reinas. Después de eso, hemos mostrado un mensaje en el terminal para pedirle al usuario que ingrese el número de reinas para las cuales él/ella quiere resolver el problema de N-Queens. Luego, simplemente hemos adquirido esto como entrada del usuario. Después de eso, tenemos un bucle "para" anidados en el que hemos llamado la función de "tablero de ajedrez". Luego, hemos llamado la función de "solución" y almacenamos su salida en la variable "resultado". Si el valor de la variable de "resultado" será "falso", entonces significará que no existe una solución para el número dado de reinas. Por fin, tenemos la declaración "Devolver 0" para terminar nuestro código.

Para compilar este código, hemos utilizado el siguiente comando:

$ g ++ 8queens.cpp -o 8queens

Para ejecutar este código, hemos utilizado el comando adjunto a continuación:

ps ./8queens

Primero se nos pidió que ingresáramos el número de reinas como se muestra en la siguiente imagen:

Hemos ingresado "8" para nuestro caso particular, como se muestra en la imagen a continuación:

Tan pronto como proporcione el número de reinas, todas las soluciones posibles al problema de las 8 reinas aparecerán en el terminal como se muestra en la siguiente imagen:

Para probar este código para el otro caso, yo.mi., La solución no existe, hemos proporcionado "3" como el número de reinas. Esto se muestra en la imagen a continuación:

Entendemos que para un tablero de ajedrez de 3 x 3, no existe ninguna solución; Es por eso que recibimos la siguiente salida:

Conclusión

Este artículo fue sobre el problema de las 8 reinas en C ++ en Ubuntu 20.04. Le explicamos brevemente sobre este problema y todas las condiciones que deben estar satisfechas para resolver este problema. Después de eso, compartimos con usted un programa C ++ completo que resolverá este problema para usted para 8 reinas o en MAX 10 Queens. Además, también probamos este código para un caso en el que la solución a este problema sea imposible. Con suerte, después de leer esta guía, tendrá una buena comprensión del famoso problema de las 8 reinas en C++.