Example #1
0
        // 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);
                    }
                }
            }
        }
Example #2
0
        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();
        }