Академический Документы
Профессиональный Документы
Культура Документы
Dada una matriz NxM, que representa un laberinto, encontrar un conjunto de movimientos a realizar para encontrar la salida en la posición (N-1,M-1),
desde la posición (0,0). Asuma que el laberinto puede tener posiciones libres (por donde se puede caminar) o bloqueadas (paredes).
Procedure Backtracking(paso) Type Integer Direccion; // 0=Ninguna, 1=Norte, 2=Sur, 3=Este, 4=Oeste;
InicializarAlternativa(alternativa); Const Integer Libre=0;
Repeat Const Integer Pared=1;
ObtenerSiguienteAlternativa(alternativa); Const Integer Visitado=2;
If (AlternativaValida(alternativa)) Then // variables globales
IncluirAlternativa(alternativa, solucionParcial); Array IncI[0..4] of Integer = {0,-1,+1,0,0};
If EsSolucion(solucionParcial) then Array IncJ[0..4] of Integer = {0,0,0,+1,-1};
encontreSolucion = true; Array solucion[0..*] of Integer; // graba las direcciones
ProcesarSolucion(solucionParcial);
Else Integer tamaño_solucion;
nuevoPaso = GenerarNuevoPaso(paso); Boolean encontro;
Backtracking(nuevoPaso); // cada celda puede tener los valores Libre, pared, visitado
If not encontreSolucion Then Array A[0..N-1][0..M-1] of Integer;
Paso = DeshacerPaso(nuevoPaso);
ExcluirAlternativa(alternativa, Procedure Main()
solucionParcial); LeerMatriz(A,N,M);
EndIf tamaño_solucion = 0;
EndIf encontro = false;
EndIf A[0,0] = Visitado;
Until SeAcabaronLasAternativas(alternativa) or Laberinto(0,0);
encontreSolucion==true; EndProcedure