View Full Version : Perl - "attraversare" matrice
Come si possono stampare tutti i "percorsi" dalla cella 0,0 alla cella n-1,n-1 possibili di una matrice?
Grazie in anticipo
Daniels118
04-03-2014, 07:52
Cosa significa "tutti i percorsi"?
cella per cella, dalla 0,0 alla n-1,n-1
Daniels118
04-03-2014, 08:34
Ho appena riparato la mia sfera magica, vediamo se funziona...
per percorso intendi un array in cui ogni elemento contiene le coordinate di una cella della matrice, e la sequenza di elementi deve rappresentare le celle adiacenti che congiungono la cella (0,0) alla cella (n-1,n-1).
Ho capito bene?
Quando due celle si possono considerare adiacenti? Solo se si trovano sulla stessa riga o colonna, oppure anche in diagonale?
Ti interessano proprio tutti i percorsi? Anche se fanno degli inutili zig-zag avanti e indietro?
1 un passo a dx
1 un passo a sx
1 un passo in diagonale
solo in ordine crescente (riga o colonna, o entrambe cambiano ad ogni passo),senza tornare indietro inutilmente
dalla 0,0 alla n-1,n-1
Daniels118
04-03-2014, 11:19
Per "tornare indietro" non intendo passare due volte sulla stessa cella, ma spostarsi in una direzione che si allontana dalla destinazione.
E' importante definire questi particolari perché determinano profonde differenze nell'algoritmo (che comunque è assolutamente indipendente dal linguaggio perl).
certamente,
appunto per questo intendo in ordine dall' alto verso il basso
Ad ogni passo quindi i=i+1 (riga), j=j+1(colonna) o entrambi a differenza di dove si trova l' elemento minore
Però si potrebbe arrivare all' ultima riga e ,doversi spostare di un determinato numero di celle verso destra per raggiungere l' estremità della matrice
Questi passi potrebbero avere un costo grande, quindi invalidare il miglior percorso scelto in modo greedy fino a questo punto
In teoria servono tutti i percorsi e decidere il migliore
Daniels118
04-03-2014, 12:14
Ma non avevi detto che nella matrice c'erano i valori delle distanze!
La soluzione migliore si può ottenere solo provando tutti i precorsi. Puoi realizzare l'algoritmo sia in maniera iterativa che ricorsiva, quale preferisci?
non ho ben capito...a te servono tutti i percorsi o solo il migliore?
perche ad un certo punto dici:
Questi passi potrebbero avere un costo grande, quindi invalidare il miglior percorso scelto in modo greedy fino a questo punto
In teoria servono tutti i percorsi e decidere il migliore
e mi fa pensare che tu cerchi semplicemente il migliore...
cmq brutalmente puoi provare con una ricerca in profondita on in ampiezza, o per qualcosa di un pelino + sofisticato un bel A-star (link (http://en.wikipedia.org/wiki/A*_search_algorithm))
il migliore però però a livello greedy è improbabile
basandosi solo sulla matrice cosa vi viene in mente?
Daniels118
04-03-2014, 14:08
Non è che la soluzione ad uno dei problemi più studiati al mondo ti "viene in mente" così, un qualunque pomeriggio di marzo... ci sono svariati algoritmi con diversi pregi e difetti, ma nessuno di essi riesce a trovare la soluzione migliore in un tempo lineare.
Daniels118
04-03-2014, 15:18
L'utente -MiStO- te ne ha già segnalato uno, trovi un elenco più ampio qui:
http://en.wikipedia.org/wiki/Shortest_path_problem
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.