• Viernes 15 de Noviembre de 2024, 05:46

Mostrar Mensajes

Esta sección te permite ver todos los posts escritos por este usuario. Ten en cuenta que sólo puedes ver los posts escritos en zonas a las que tienes acceso en este momento.


Temas - changel

Páginas: [1]
1
C/C++ / Un Programa Que Me Trae De Cabeza Soy Principiante
« en: Sábado 29 de Mayo de 2004, 15:31 »
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.
B) 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

Páginas: [1]