echar un vistazo a este codigo simple de recursividad por favor!
Publicado por diegomy (1 intervención) el 12/03/2014 17:03:57
Hola buenas! he escrito este codigo que es el tipico caballo por todas las casillas,que funciona. al pasarlo del papel tuve un problema que logre solucionar, lo he explicado en el codigo, es que cuando, despues de terminar un proceso recursivo donde no pudo avanzar, regresa al anterior, pero en vez de regresar las variables a las que tenia, se queda con las de la ultima pasada fallida. no se si me explico bien, aqui el codigo:
se que esta un poco desordenado y estoy seguro de que podria ser mas claro. tambien me gustaria poder implementar mas el uso de objetos, pero es que recien empiezo en java. pues si alguien me ayuda a mejorar y ayudarme a ver errores que mejorar y convenciones omitidas le agradeceria muchisimo
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
69
70
public class PaseoDelCaballo
{
static int [][] tablero = new int [8][8]; //matriz donde se guardaran los movimientos
static int salida; //bandera para salir de la recursividad
public static void mover (int actX, int actY, int movA)
{
int futX=actX, futY=actY, sigMov = movA ; //al volver un paso atras en el proceso no recuperaba el valor de las variables, lo solucione declarandolas...
if (movA ==64) //tablero lleno
{
imprimirTablero();
salida=-1;
}
else
{
for ( int x = -2; x <= 2; x++)
{
if (salida==-1) break; //salida si se encontro una solucion
for ( int y = -2 ; y <= 2; y++)
{
if (salida==-1) break; //salida si se encontro una solucion
futX = actX; futY = actY; sigMov = movA ; //... y recuperando los valores originales en cada repeticion
if ( movCaballo(x,y))
{
if (esValido ( futX + x, futY + y ))
{
futX += x;
futY += y;
tablero [ futX ] [ futY ] = ++sigMov;
mover ( futX, futY,sigMov);
}
}
else
if ( x == 2 & y == 2)
tablero [actX][actY] = 0;
}
}
}
}
static boolean movCaballo (int x, int y)
{
if ((Math.abs(x)==2 ^ Math.abs(y)==2) & (Math.abs(x) != Math.abs(y)) & Math.abs(x) != 0 & Math.abs(y) != 0)
return true;
else
return false;
}
static boolean esValido (int x, int y)
{
if ((((x >= 0 & x <= 7) & (y >= 0 & y <= 7)) && tablero[x][y] == 0))
return true;
else
return false;
}
static void imprimirTablero ()
{
for (int [] fila : tablero)
{
System.out.print(" -----------------------------------------------\n");
for (int columna : fila)
System.out.printf ("|%4d ", columna);
System.out.println ("|");
}
System.out.print(" -----------------------------------------------\n");
}
public static void main (String[] args)
{
tablero[0][0]=1;
mover (0,0,1);
}
}
Valora esta pregunta


0