|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 | |
|
Senior Member
Iscritto dal: Sep 2008
Città: Messina
Messaggi: 991
|
[C] Adiacenza nei grafi
Il mio problema è riscontrato all'interno di questo esercizio:
Quote:
Codice:
for (n = adj[mittente]; n != NULL; n = n->next) {
/* qualcosa qui dentro */
}
__________________
PC/HTPC: Mac Mini 3,1 late 2009 | My Book Studio 2TB | LG M237WD monitor/tv | Logitech Z4 | Apple Magic Mouse | Apple Wireless Keyboard | Apple Remote Mobile: Samsung Galaxy Wonder i8150 cm9 |
|
|
|
|
|
|
#2 |
|
Member
Iscritto dal: Apr 2007
Messaggi: 182
|
Il problema potrebbe essere risolto in diversi modi, però secondo me una soluzione semplice potrebbe essere aggiungere un campo hop intero all'interno della struttura pacchetto, ammesso che l'esercizio conceda la possibilità di modificare tale struttura. In questo modo utilizzi il campo hop come un contatore che conta il numero di salti, ossia il numero di nodi che il pacchetto attraversa, se hop=1 e il pacchetto è arrivato a destinazione significa che il destinatario è proprio un vicino.
Considera che il campo hop esiste anche nella realtà, si chiama TTL (Time To Live) e viene utilizzato per evitare cicli infiniti da parte di un pacchetto. In alternativa ti basta fare una scansione della lista di adiacenza del mittente prima di "spedire" il pacchetto. Però la prima soluzione secondo me è più flessibile, perchè ti permette di avere anche ulteriori informazioni come ad esempio la distanza tra due nodi... |
|
|
|
|
|
#3 | |
|
Senior Member
Iscritto dal: Sep 2008
Città: Messina
Messaggi: 991
|
Quote:
__________________
PC/HTPC: Mac Mini 3,1 late 2009 | My Book Studio 2TB | LG M237WD monitor/tv | Logitech Z4 | Apple Magic Mouse | Apple Wireless Keyboard | Apple Remote Mobile: Samsung Galaxy Wonder i8150 cm9 |
|
|
|
|
|
|
#4 |
|
Member
Iscritto dal: Apr 2007
Messaggi: 182
|
Naturalmente il campo di ogni pacchetto sarà inizializzato a 0 e verrà incrementato ad ogni salto, ossia ogni volta che passi da un nodo all'altro e questa operazione tu la esegui proprio nel momento in cui scrivi:
Codice:
n = n->next |
|
|
|
|
|
#5 |
|
Senior Member
Iscritto dal: Jul 2006
Città: Bergamo
Messaggi: 401
|
Forse ho capito male io, ma non basta fare così??
Codice:
coda Q;
pila A, B;
while(true) {
bool inserito := false;
pacchetto P := dequeue(Q); //estraggo il pacchetto dalla coda
int adjp := adj[P.mittente]; //prendo gli adiacenti del mittente
for(i := 0 to adjp.length) //scorro gli adiacenti del mittente
if(P.destinatario == adjp[i]) then //se il destinatario è tra gli adiacenti del mittente
enqueue(P, A) //lo inserisco in A
inserito := true;
break;
if(!inserito) then
enqueue(P, B) //altrimenti lo inserisco in B
inserito := false;
} //fine ciclo infinito
Questa è solo una bozza per rendere l'idea, ma se è corretta dovresti anche essere in grado di sistemarla a tuo piacimento Spero di aver capito bene!!! Cya
__________________
iMac 27" 5K |
|
|
|
|
|
#6 | |
|
Member
Iscritto dal: Apr 2007
Messaggi: 182
|
Questa è l'alternativa che avevo suggerito nel primo post:
Quote:
|
|
|
|
|
|
|
#7 | |
|
Senior Member
Iscritto dal: Apr 2010
Città: Frosinone
Messaggi: 416
|
Quote:
|
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 20:26.




















