es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Número máximo de alfiles en un tablero de ajedrez de N x N, ¿cómo puedo encontrar TODAS las soluciones en lugar de solo una?

He creado un algoritmo que colocará un número máximo de alfiles en un tablero de ajedrez NxN, pero solo funciona para una solución. ¿Es posible mejorar este algoritmo para que me muestre todas las soluciones posibles?
La forma en que este algoritmo funciona es indexando las diagonales de la matriz y almacenando sus índices en un HashSet, y si el índice actual no está en el HashSet, se colocará el alfil en ese campo.

Indexando las diagonales:

  • Izquierda a derecha = I – J
  • Derecha a izquierda = I + J

Código:

“`java
public static void maxBishop() {
HashSet<integer> leftToRight = new HashSet<>();
HashSet<integer> rightToLeft = new HashSet<>();

<pre><code>int[][] matrix = {
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};

for (int i = 0; i < 10; i++) {
for (int j = 0; j < 10; j++) {
if (!rightToLeft.contains(i + j) && !leftToRight.contains(i – j)) {
matrix[i][j] = 1;
rightToLeft.add(i + j);
leftToRight.add(i – j);
}
}
}
</code></pre>

}
“`

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Es posible mejorar el algoritmo para mostrar todas las soluciones posibles. Una aproximación sería utilizar la técnica de retroceso (backtracking), donde consideramos todas las posibles ubicaciones de los alfiles y retrocedemos si llegamos a un punto sin salida, deshaciendo el paso anterior hasta llegar a todas las soluciones posibles. Esto se puede implementar utilizando la recursión, donde colocamos un alfil en una celda y colocamos recursivamente los alfiles restantes. Retrocedemos cuando llegamos a un punto donde no podemos colocar más alfiles sin violar las restricciones. Al hacer esto, recorremos todo el espacio de búsqueda y encontramos todas las soluciones posibles.

Comments are closed.