Haber si podeis con este que a mi me trae de cabeza tanto lio de filas y columnas:
Desarrollar un programa para resolver el problema de hallar una ruta
de salida de un laberinto. Para ello, se usa un array (dimensión máxima de
30x30) para almacenar el laberinto, cuyo contenido serán constantes enteras
(1 celda ocupada, 0 si no lo está). Los datos del laberinto se leen desde un
fichero de tipo texto (config.dat) que contiene los siguientes datos:
- El número de filas y columnas del laberinto.
- Fila y columna de la posición inicial.
- Fila y columna de la posición final.
- Por cada posición ocupada la fila y columna
Nota: La numeración de las filas y columnas es a partir de 1 (para el usuario)
Los movimientos permitidos son avanzar o retroceder una fila o columna,
es decir cuatro movimientos como máximo. No se consideran movimientos en
diagonal.
El algoritmo a seguir para resolver el programa es el siguiente:
- Asignar como posiciones ocupadas: la primera y posterior a la última
fila, así como la primera y posterior a la última columna (para facilitar la
programación).
- Inicializar el contador de movimientos, el contador de posiciones del
camino y el camino (array).
- Mientras no sea la posición final realizar:
- Mientras no se supere el límite de movimientos (4) comprobar, siguiendo
un orden (antihorario), si la casilla siguiente está desocupada. Si es así
salir del bucle.
- Si el contador de movimientos está en el rango correcto, incrementar
el contador de posiciones del camino, almacenar la fila y columna respectiva
en el array del camino y guardar el contador de movimiento (en un array),
marcar como ocupada la fila y columna respectiva y reinicializar el contador
de movimientos. Sino, si el contador de posiciones del camino es cero,
devolver un error (no hay camino), caso contrario, volver a la posición
anterior disminuyendo en uno el contador de posiciones del camino, recuperando
la fila y columna respectiva a esa posición y recuperando el número del
movimiento (para continuar probando las demás posiciones).
- Almacenar la última posición del camino.
Se pide (considerando variables globales):
a) Escribir una función que lea los datos del problema y asigne el laberinto.
Escribir una función para hallar el camino o devuelva un error (-1)
en caso que no exista.
c) Escribir una función para imprimir el laberinto y el camino a seguir,
usando un 1 para indicar posición ocupada y un 0 si no lo está. El camino se
imprimirá por líneas indicando la fila y columna del camino empezando por la
primera posición.
d) Escribir el programa principal que llame adecuadamente al resto de
funciones y resuelva el problema.
Ejemplo:
Laberinto
0 0 0 0 0
0 1 1 0 1
0 0 0 1 0
1 1 0 0 0
0 0 0 1 0
Fichero
5 5
1 1
5 5
2 2
2 3
2 5
3 4
4 1
4 2
5 4
Movimientos
1
2 X 0
3