// Recursividad public static void ComprobarCamino(Laberinto laberinto, Casilla casillaActual) { if (casillaActual.IsFin()) { laberinto.SetCamino(true); } else { int posXnueva, posYnueva; Casilla casillaNueva; int[,] movimientos = { { -1, 0 }, { 0, 1 }, { 1, 0 }, { 0, -1 } }; for (int i = 0; i < movimientos.GetLength(0); i++) { posXnueva = casillaActual.GetPosX() + movimientos[i, 0]; posYnueva = casillaActual.GetPosY() + movimientos[i, 1]; casillaNueva = laberinto.GetCasillaComprobada(posXnueva, posYnueva); if (laberinto.MovimientoDisponible(casillaActual, casillaNueva, i)) { casillaActual.SetVisitado(true); ComprobarCamino(laberinto, casillaNueva); casillaActual.SetVisitado(false); } } } }
static void Main(string[] args) { int F; int C; if (args.Length == 2 && Int32.TryParse(args[0], out F) && Int32.TryParse(args[1], out C) && 1 <= F && C > 0 && C <= 20) { char[,] posiciones = new char[F, C]; char caracter; bool repetir = false; for (int x = 0; x < F; x++) { for (int y = 0; y < C; y++) { repetir = false; while (!repetir) { Console.Write(string.Format("\nIntroduce la posición ({0},{1}): ", x, y)); try { caracter = Convert.ToChar(Console.ReadLine()); if (caracter == 'E' && !ComprobarEntradaSalida(caracter, posiciones)) { Console.WriteLine("Ya hay una entrada 'E' establecida. Introduce otra posición.\n"); } else if (caracter == 'S' && !ComprobarEntradaSalida(caracter, posiciones)) { Console.WriteLine("Ya hay una salida 'S' establecida. Introduce otra posición.\n"); } else if (caracter == '+' || caracter == '.' || caracter == 'E' || caracter == 'S') { posiciones[x, y] = caracter; repetir = true; } else { Console.WriteLine("Error. Debe introducir un carácter válido: ['+', '.', 'E', 'S']."); } } catch (FormatException) { Console.WriteLine("Error. Debe introducir un carácter válido: ['+', '.', 'E', 'S']."); repetir = false; } } } } // Generacion del tablero Casilla[,] tablero = ConstruirTablero(posiciones); // Creo el laberinto Laberinto laberinto = new Laberinto(tablero); // Mostramos laberinto MostrarPosiciones(posiciones); // Comenzamos recursividad ComprobarCamino(laberinto, tablero[0, 0]); // Muestro las soluciones if (laberinto.GetCamino()) { Console.WriteLine("SI hay camino"); } else { Console.WriteLine("NO hay camino"); } } else { Console.WriteLine("Parámetros incorrectos.\nUso: Camino<filas> <columnas>"); } Console.ReadKey(); }