|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Senior Member
Iscritto dal: Jun 2009
Messaggi: 5537
|
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 Ultima modifica di gabmac2 : 02-03-2014 alle 17:08. |
![]() |
![]() |
![]() |
#2 |
Senior Member
Iscritto dal: Jan 2014
Messaggi: 852
|
Cosa significa "tutti i percorsi"?
|
![]() |
![]() |
![]() |
#3 |
Senior Member
Iscritto dal: Jun 2009
Messaggi: 5537
|
cella per cella, dalla 0,0 alla n-1,n-1
|
![]() |
![]() |
![]() |
#4 |
Senior Member
Iscritto dal: Jan 2014
Messaggi: 852
|
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? |
![]() |
![]() |
![]() |
#5 |
Senior Member
Iscritto dal: Jun 2009
Messaggi: 5537
|
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 |
![]() |
![]() |
![]() |
#6 |
Senior Member
Iscritto dal: Jan 2014
Messaggi: 852
|
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). |
![]() |
![]() |
![]() |
#7 |
Senior Member
Iscritto dal: Jun 2009
Messaggi: 5537
|
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 |
![]() |
![]() |
![]() |
#8 |
Senior Member
Iscritto dal: Jan 2014
Messaggi: 852
|
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? |
![]() |
![]() |
![]() |
#9 | |
Senior Member
Iscritto dal: May 2005
Città: Trieste
Messaggi: 2285
|
non ho ben capito...a te servono tutti i percorsi o solo il migliore?
perche ad un certo punto dici: Quote:
cmq brutalmente puoi provare con una ricerca in profondita on in ampiezza, o per qualcosa di un pelino + sofisticato un bel A-star (link)
__________________
neo mini v2 / asus strix z490i / 10600k@? / uh12s / rx6700xt / 32gb ddr4@3200 / sandisk 250 + asenno 1tb / lenovo g34w
trattative concluse : tante... |
|
![]() |
![]() |
![]() |
#10 |
Senior Member
Iscritto dal: Jun 2009
Messaggi: 5537
|
il migliore però però a livello greedy è improbabile
basandosi solo sulla matrice cosa vi viene in mente? |
![]() |
![]() |
![]() |
#11 |
Senior Member
Iscritto dal: Jan 2014
Messaggi: 852
|
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.
|
![]() |
![]() |
![]() |
#12 |
Senior Member
Iscritto dal: Jun 2009
Messaggi: 5537
|
certamente,
ad esempio? |
![]() |
![]() |
![]() |
#13 |
Senior Member
Iscritto dal: Jan 2014
Messaggi: 852
|
L'utente -MiStO- te ne ha già segnalato uno, trovi un elenco più ampio qui:
http://en.wikipedia.org/wiki/Shortest_path_problem |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 01:02.