Effettivamente quegli appunti sono scritti da cani, e non mi riferisco solo al codice, ma anche all'italiano stentoreo e pieno di anacoluti. Quindi ti suggerisco ti studiare da qualche altra parte. Purtroppo anche il mio prof di algoritmi e strutture dati era un casinista, quindi non ti posso consigliare i suoi lucidi.
Comunque, dalla pazzia delirante di quel codice sono riuscito a capire l'idea generale. Il punto è che usa il termine "node" sia per indicare i nodi di una lista, sia per indicare i nodi di un grafo. Dato che la rappresentazione del grafo usa le liste di adiacenze, la sovrapposizione dei nomi genera qualche conflitto mentale.
- Arc_Node indica il nodo della lista che contiene gli archi. La classe viene quindi usata anche per rappresentare l'arco stesso. Arc_Destination è la testa dell'arco, mentre Arc_Attribute è l'etichetta applicata all'arco, oppure il suo peso se si tratta di dati numerici. Usare un puntatore a void piuttosto che dei template mi sembra anacronistico.
- Arc_List è una lista linkata i cui elementi sono istanze di Arc_Node. Contiene metodi per inserire, rimuovere e cercare elementi nella lista.
- Vertex_Node indica il nodo della lista che contiene i vertici (o nodi del grafo). Rappresenta il singolo elemento della lista di adiacenza. Contiene quindi la lista di archi che partono da questo vertice (sottoforma di Arc_List), un puntatore al prossimo Vertex_Node nella lista di adiacenza, un contatore di rifermenti e l'etichetta del nodo Vertex_Attribute.
- Graph (o Vertex_List) rappresenta il grafo mediante una lista di adiacenza, ossia un lista di elementi Vertex_Node, i quali contengono i vertici del grafo.
La lista di adiacenza contiene quindi tutti i vertici del grafo. A sua volta, ogni vertice contiene una lista di archi uscenti da esso. Accedendo alla testa di un arco si ottiene il secondo estremo dell'arco.
|