Dev - C++ - Backtracking, divide y vence, recursividad

 
Vista:
Imágen de perfil de Sarah

Backtracking, divide y vence, recursividad

Publicado por Sarah (29 intervenciones) el 24/05/2022 13:10:27
Escriba un programa que sirva para saber las posibilidades de movimiento de un caballo en una partida de ajedréz de una casilla a otra (por ejemplo para comer una pieza). Para ello se ha creado una matriz A [8][8] la cual contiene un mapa del tablero (0 si la casilla está vacía o 1 si está ocupada) y se debe crear un programa donde ingresando el punto de inicio y el de destino diga si existe una combinación de movimientos posibles que lo lleven del inicio al destino sin que pase a través de una casilla ocupada o no.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Sarah

Backtracking, divide y vence, recursividad

Publicado por Sarah (29 intervenciones) el 05/06/2022 15:18:47
Hola, por los momentos llevo esta parte del código para realizar este programa, ¿me podrían ayudar a completar lo que me falta?

const int N = 8;
const int n = (N+1);
int tablero[n][n];
int d[8][2] = {{2,1}, {1,2}, {-1,2}, {-2,1},{-2,-1},{-1,-2},{1,-2}, {2,-1}}; // desplazamientos relativos del caballo


void saltoCaballo(int i, int x, int y, bool& exito) {
int nx, ny; int k;
exito = false;
k = 0; // inicializa contador de posibles (8) movimientos



do {
k++;
nx = x + d[k - 1][0];
ny = y + d[k - 1][1]; // determina si nuevas coordenadas son aceptables

if ((nx >= 1) && (nx <= N) &&
(ny >= 1) && (ny <= N) &&
(tablero[nx][ny] == 0))
{ tablero[nx][ny]= i; // anota movimiento
if (i < N * N)
{ saltoCaballo(i + 1, nx, ny, exito); // analiza si se ha completado la solución
if (!exito)
{ // no se alcanzó la solución
tablero[nx][ny] = 0;

}
} else
exito = true; // caballo ha cubierto el tablero
}
} while ((k < 8) && !exito); }

void escribeTablero() {
int i,j; for(i = 1; i <= N; i++)
{ for (j = 1; j <= N; j++)
cout << tablero[i][j] << " ";
cout << endl;
}
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar