Please ignore secret bonuses. Secret tests do NOT award bonus. Max hw grade is 30+2 bonus efficiency

Do you need help?

percorso tra nodi HW4bis es 3

E
Emanuelebev (720 points)
5 17 24
in HW4bis by (720 points)
ho una lista con tutte le coordinate dei figli, ora devo trovare i nodi più distanti, prendendo ogni nodo e confrontare quanto dista con ciascun altro nodo. Il mio problema è che partendo dalle coordinate del primo nodo e andando ricorsivamente nelle 4 direzioni alla ricerca del nodo di arrivo, mi memorizza ovviamente tutte le coordinate dei pixel bianchi su cui passo e non riesco quindi ad "isolare" il percorso giusto. La mia idea era quella di creare tutti i percorsi indipendenti e prendere alla fine solamente quello che arriva al nodo che mi interessa

1 Answer

_andrea_ (45670 points)
11 42 297
by (45.7k points)
Puoi farlo se pensi una cosa tipo: vado a destra, se trovo un nodo aggiungo all'insieme quel pixel, altrimenti no e vado in basso, ecc. Io invece se ricordo bene ho calcolato la distanza tra padre e figlio direttamente nella prima esplorazione. Ogni volta che vado avanti con un pixel aumento il livello della ricorsione (un parametro della funzione che parte da 0 e viene incrementato a ogni chiamata). Così quando trovi un nodo salvi quel livello nei suoi attributi e lo puoi riutilizzare dopo per vedere quanto è distante dal padre e dal padre del padre ecc
E
Emanuelebev (720 points)
5 17 24
by (720 points)
ho capito il tuo procedimento, però non capisco a cosa ti serve l'attributo livello.

i due nodi più distanti possono stare sullo stesso livello, no?!

sicuramente i due nodi più distanti sono foglie, quindi vorrei ragionare più su quel fatto
_andrea_ (45670 points)
11 42 297
by (45.7k points)
Si ma il livello ti serve per sapere effettivamente quanto sono distanti. Per trovarli devi calcolare il diametro del tuo albero basandoti però non sui nodi semplici ma sui pixel che li separano. Per farlo devi per forza esplorare nuovamente l'immagine e contare di nuovo i pixel, oppure calcoli il diametro direttamente sull'albero usando i pixel (che ti salvi precedentemente) come distanze tra nodi
E
Emanuelebev (720 points)
5 17 24
by (720 points)
Quindi devo necessariamente crearmi l’albero come liste di liste oppure con la classe nodo?

Oppure posso cercare i pixel più distanti solamente con l’attributo livello?
_andrea_ (45670 points)
11 42 297
by (45.7k points)
Non so cosa intendi con lista di liste. Io ho fatto così: esploro l'immagine creando l'albero di Nodi e in ogni Nodo salvo un intero che mi dice quanti pixel ho passato prima di arrivarci. La radice ovviamente ne avrà 0. Poi per calcolare i due Nodi più distanti basta calcolare il diametro basandosi su quell'intero che hai salvato in ogni Nodo
E
Emanuelebev (720 points)
5 17 24
by (720 points)
ho ripreso da poco il programma, sono riuscito a creare l'albero, calcolare le altezze dei nodi e calcolare il diametro. Non riesco però a capire quali sono le foglie più distanti attraverso il calcolo del diametro
_andrea_ (45670 points)
11 42 297
by (45.7k points)
Le foglie più distanti sono quelle che fanno il diametro
E
Emanuelebev (720 points)
5 17 24
by (720 points)
Si, lo so. Non riesco a capire quali sono effettivamente le due foglie più distanti
andrea.sterbini (207920 points)
750 1267 2373
by (208k points)
te le devi ricordare assieme alla lunghezza del diametro che stai costruendo
_andrea_ (45670 points)
11 42 297
by (45.7k points)
Ritorna una tupla che contiene la distanza e i nodi da cui l'hai ottenuta
E
Emanuelebev (720 points)
5 17 24
by (720 points)
Grazie, ci provo
E
Emanuelebev (720 points)
5 17 24
by (720 points)
Sono arrivato in un punto in cui trovo solamente le due foglie appena sotto la radice con altezza maggiore. Non capisco proprio come faccio a salvare le due foglie più lontane usando il metodo che usa il professore
_andrea_ (45670 points)
11 42 297
by (45.7k points)
Tornando una tupla tipo
distanza, nodo1, nodo2
Così sai quant'è la distanza e anche da dove a dove va