Dev - C++ - Recursividad y backtracking

 
Vista:
Imágen de perfil de Sarah

Recursividad y backtracking

Publicado por Sarah (29 intervenciones) el 20/05/2022 14:12:31
En un tablero de ajedrez se coloca un alfil en la posición (X0, Y0) y un peón en la posición (i, j), siendo 1< = j <= 7. Se pretende encontrar una ruta para que el peón que llegue a la fila 8 sin ser comido por el alfil. Siendo el único movimiento permitido para el peón el de avance desde la posición (i, j) a la posición (i + 1, j). Si se encuentra que el peón está amenazado por el alfil en la posición (i, j), entonces debe retroceder a la fila 1, columna j+1 o j-1 {(1, j+1), (1, j-1)} Escribir el programa para resolver el supuesto problema. Teniendo en cuenta que el alfil ataca por diagonales
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 Alfil
Val: 4.344
Oro
Ha mantenido su posición en Dev - C++ (en relación al último mes)
Gráfica de Dev - C++

Recursividad y backtracking

Publicado por Alfil (1444 intervenciones) el 20/05/2022 16:43:32
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
#include <iostream>
 
using namespace std;
 
bool ataqueAlfil(char tablero[8][8], int posPeonX, int posPeonY);
void imprimir(char m[8][8]);
 
int main()
{
    char tablero[8][8];
    int posPeonX, posPeonY;
 
    for (int i = 0; i < 8; i++)
        for (int j = 0; j < 8; j++)
            tablero[i][j] = ' ';
 
    cout << "Posicion del Peon: " << endl;
    cout << "X: "; cin >> posPeonX;
    cout << "Y: "; cin >> posPeonY;
 
    tablero[0][0] = 'A';
    tablero[posPeonX][posPeonY] = 'P';
 
    imprimir(tablero);
 
    while (posPeonX < 7)
    {
        if (ataqueAlfil(tablero, posPeonX + 1, posPeonY))
        {
            tablero[posPeonX][posPeonY] = ' ';
            posPeonX++;
            tablero[posPeonX][posPeonY] = 'P';
        }
        else
        {
            tablero[posPeonX][posPeonY] = ' ';
            posPeonX = 1;
            posPeonY = posPeonY == 7 ? 0 : ++posPeonY;
            tablero[posPeonX][posPeonY] = 'P';
        }
        imprimir(tablero);
    }
}
 
void imprimir(char m[8][8])
{
    cout << endl << endl;
    for (int i = 0; i < 8; i++)
    {
        cout << "| ";
        for (int j = 0; j < 8; j++)
        {
            cout << m[i][j] << " | ";
        }
        cout << endl << endl;
    }
    cout << endl << endl;
}
 
bool ataqueAlfil(char tablero[8][8], int posPeonX, int posPeonY)
{
    for (int i = 0; i < 8; i++)
        for (int j = 0; j < 8; j++)
            if (posPeonX == i && posPeonY == j && i == j)
                return false;
 
    return true;
}
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

Recursividad y backtracking

Publicado por FSA (1 intervención) el 10/03/2023 04:44:57
¿Cómo sería en Java?
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