SoloCodigo

CLR: .Net / Mono / Boo / Otros CLR => C# => Mensaje iniciado por: jimadorboy en Jueves 28 de Junio de 2007, 02:49

Título: Ayuda Laberinto De Un Robot
Publicado por: jimadorboy en Jueves 28 de Junio de 2007, 02:49
HOLA QUE TAL A TODOS , ALGUIEN ME PUDIERA AYUDAR CON UN PROGRAMA EN C#, ODAR ALGUNA IDEA?  EL PROBLEMA ES EL SIG: NECESITO UN TABLERO DE 20 X 15 CASILLAS DONDE SE PONGAN ALEATORIAMENTE 40 OBSTACULOS Y ALEATORIAMENTE 2 SALIDAS EN EL CONTORNO DEL TABLERO , DONDE UN ROBOT BUSCARA LAS SALIDAS  EN TODO EL TABLERO. CUALQUIER OPINION O TIP ES BIENVENIDO .. GRACIAS
Título: Re: Ayuda Laberinto De Un Robot
Publicado por: Enko en Viernes 29 de Junio de 2007, 01:04
Busca informacion en Google hay de sobra.
Lo que buscas se llama PahtFinding. Existen numerosos algoritmos que hacen eso,  uno muy conocido y el "mas optimizado" es el algoritmo A* (A Star) pero es bastante dificil de implementar.

El mas sencillo que existe es este:
(esta explicado parra ActionScript pero aun asi es un buen link)
http://www.tonypa.pri.ee/tbw/tut22.html (http://www.tonypa.pri.ee/tbw/tut22.html)

La idea el algoritmo es:
Debes tener 2 listas de tipo pila o cola.
1)La pirmera lista es para los casillas no verificadas
2)La segunda es para las que ya se verifico.

El algoritmo funciona asi:
Te colocas en la casilla de entrada. (seria el primer elemento de la lista de celdas para verificar>)
Verificas si la casilla actual es distinta a la casilla final.
Si es igual, se encontro la salida.
Si es distinta empezamos:
   Verificas si las celdas contiguas no tienen obstaculo, las que no tienen obstaculo las agragas a la lista de celdas para verificar solo si ya no fueron verificadas. (cada vez que chequeas una celda, la agregas a la lista de celdas chequeadas)
Sacas un elemento de la lista de casillas para verificar y verificas que no sea la celda final de la meta.
    Si no es la final, la colocas en la lista de las celdas ya verificadas y agregas a la lista de las celdas para verificar todas las celdas contiguas a esa casilla salgo las que ya estan verificadas (para eso esta la lista de celdas verificadas).
Esto lo repites hasta que la casilla actual sea la final.


Basicamente, todo pasa por ir recoriendo todas las casillas salgo las que ya fueron recoridas.

Fijate en el link de Actionscript que esta muy bien explicado.