Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 08-11-2011, 20:10   #1
Dan__88
Senior Member
 
Iscritto dal: Aug 2011
Messaggi: 672
[Algoritmo] Euristica per pathfinding

Ciao a tutti!
Mi serve una soluzione euristica per la ricerca di QUATTRO nodi su un grafo, ovvero un cammino che parta dalla posizione A e tocchi B, C,D e E.
Tale funzione viene chiamata dopo ogni passo, per scegliere il successivo.
Tra le più banali, ho provato ad esempio a calcolare le distanze tra la mia posizione e i 4 punti, ed a restituire la minima (o la massima)

Idee?
Dan__88 è offline   Rispondi citando il messaggio o parte di esso
Old 08-11-2011, 22:51   #2
webking
Senior Member
 
Iscritto dal: Aug 2006
Messaggi: 334
Ciao,
non ho ben capito la tua richiesta: hai un grafo e devi restituire il percorso minimo o tutta una lista di possibili percorsi?

Una volta mi è capitato di dare una mano ad un mio amico per fare un gioco EX in C, e dovevo cercare un cammino "vincente" che toccasse una serie di caselle adiacenti occupate da pedine dello stesso giocatore.

La logica che c'è dietro è molto semplice: usa una funzione ricorsiva.
Codice:
      O                Livello 0 (Radice)
    / | \ 
  O  O  O            Livello 1
 /|   |
O O  O               Livello 2
       | \
       O O            Livello 4
Tramite la ricorsione, le chiamate a procedura si impilano in uno stack gestito con politica LIFO (Last In first out). In quale linguaggio devi scrivere? c? Java?
webking è offline   Rispondi citando il messaggio o parte di esso
Old 10-11-2011, 08:28   #3
gugoXX
Senior Member
 
L'Avatar di gugoXX
 
Iscritto dal: May 2004
Città: Londra (Torino)
Messaggi: 3692
Quote:
Originariamente inviato da Dan__88 Guarda i messaggi
Ciao a tutti!
Mi serve una soluzione euristica per la ricerca di QUATTRO nodi su un grafo, ovvero un cammino che parta dalla posizione A e tocchi B, C,D e E.
Tale funzione viene chiamata dopo ogni passo, per scegliere il successivo.
Tra le più banali, ho provato ad esempio a calcolare le distanze tra la mia posizione e i 4 punti, ed a restituire la minima (o la massima)

Idee?
Scrivi un Dijkstra.
Poi calcoli il Dijkstra tra AB, BC, CD, DE -> es:200
poi calcoli il Dijkstra tra AB, BC, CE, ED -> Es:220

insomma calcoli il Dijkstra tra tutte le combinazioni senza ripetizione

ABCDE
ABCED
ABDCE
ABDEC
ACBDE
ACBED
ACE
...

AEDCB

(A e' sempre fisso mi pare di avere capito)
ed scegli quella che ti piace di piu'. Magari quella che ha il valore minore.

In questo modo "forse" non devi richiamare la funzione ad ogni passo. Precalcoli all'inizio e se non cambia nulla segui il tracciato fino alla fine.
__________________
Se pensi che il tuo codice sia troppo complesso da capire senza commenti, e' segno che molto probabilmente il tuo codice e' semplicemente mal scritto.
E se pensi di avere bisogno di un nuovo commento, significa che ti manca almeno un test.
gugoXX è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 06:20.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v