• Viernes 15 de Noviembre de 2024, 07:47

Autor Tema:  Un Programa Que Me Trae De Cabeza Soy Principiante  (Leído 1305 veces)

changel

  • Nuevo Miembro
  • *
  • Mensajes: 2
    • Ver Perfil
Un Programa Que Me Trae De Cabeza Soy Principiante
« en: Sábado 29 de Mayo de 2004, 15:31 »
0
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

JuanK

  • Miembro de ORO
  • ******
  • Mensajes: 5393
  • Nacionalidad: co
    • Ver Perfil
    • http://juank.io
Re: Un Programa Que Me Trae De Cabeza Soy Principiante
« Respuesta #1 en: Sábado 29 de Mayo de 2004, 15:53 »
0
Se supone que para publicar un reto, este no deberia ser una tarea o algo asi...
sin embargo cumples con la estructura para que sea un reto  :ph34r:
Otra cosa es que se supone que el que propone el reto ya debe tener la solucin de antemano, cosa que supongo que aca no sucede..
buno lo dejo a consideracion del que lo quiera hacer.
[size=109]Juan Carlos Ruiz Pacheco
[/size]
Microsoft Technical Evangelist
@JuanKRuiz
http://juank.io

changel

  • Nuevo Miembro
  • *
  • Mensajes: 2
    • Ver Perfil
Re: Un Programa Que Me Trae De Cabeza Soy Principiante
« Respuesta #2 en: Sábado 29 de Mayo de 2004, 16:20 »
0
Supongo que un reto lo pueda plantear cualquiera, si la solucion es conocida, porque lo es aunque no lo sea por mi, el que intenta resolver el problema lo hace pensando en que la solucion ya existe y por ello tampoco lo intenta con interes suficiente, no se si me explico. Si necesitas que yo sepa la solucion para siquiera intentarlo no serias un programador.

De todas manera esto no es un foro de filosofia.

Saludos a todos

Noel Solw

  • Miembro activo
  • **
  • Mensajes: 81
    • Ver Perfil
Re: Un Programa Que Me Trae De Cabeza Soy Principiante
« Respuesta #3 en: Sábado 29 de Mayo de 2004, 23:06 »
0
Estimado Chanqel : tengo este problema solucionado con y sin recursion, pero sin usar archivos, los labertintos se general en forma aleatoria.
Como esto es un "reto", y no tengo la intencion de hacer el trabajo de nadie, te prometo mandar la solucion que prefieres cuando publiques la tuya, o por lo menos un intento de solucion del problema.
atte tuyo.

JuanK

  • Miembro de ORO
  • ******
  • Mensajes: 5393
  • Nacionalidad: co
    • Ver Perfil
    • http://juank.io
Re: Un Programa Que Me Trae De Cabeza Soy Principiante
« Respuesta #4 en: Domingo 30 de Mayo de 2004, 04:04 »
0
muy bien Noel.

En efecto no puedes plantear un reto si no conoces por lo menos una solucion, ya qu sino la conoces no tienes el criterio para evaluar las soluciones dadas por los participantes del reto.
Adicionalmente sino conoces la solucion nadie garantiza a los participantes que el reto en efecto tenga al menos una solucion, ni nadie garantiza que sea lo suficientemente complejo para considerarce un reto. :comp:

Por otro lado lo que puede ser un reto para ti solo porque no lo puedes hacer, no significa que sea un reto para todos, solo si lo hacer podras saber si realmente es un reto,
Ademas si no lo has hecho lo más seguro es que estes buscando que alguien te lo haga, porque necesitas esa tarea.

de todas maneras ahi lo dejo si alguien lo quiere hacer.
[size=109]Juan Carlos Ruiz Pacheco
[/size]
Microsoft Technical Evangelist
@JuanKRuiz
http://juank.io