PDA

View Full Version : [C] liste di adiacenza


misterx
23-04-2008, 21:20
struct node { /* nodo di lista di adiacenza */
int v;
struct node *next;
};
struct graph { /* struttura associata a ogni grafo */
int V; /* numero nodi */
int E; /* numero archi */
struct node **A; /* array di liste di adiacenza */
};


mi servirebbe una conferma su ciò che ho postato e cioè: supponendo di avere un grafo fatto da 3 nodi e tre archi, allocherei una ed una sola struttura di tipo graph con V=3 ed E=3, e l'array **A conterrebbe tre puntatori a 3 strutture di tipo node, ma è così ?

grazie

misterx
24-04-2008, 17:02
domanda troppo banale ? :)

mi rispondo da solo, è così

misterx
25-04-2008, 08:32
implementando un grafo attraverso un array ed un certo numero di liste di adiacenza, come le si percorre ?

misterx
01-05-2008, 21:22
speriamo di non continuare a parlare da solo!

Una lista di adiacenza è una serie di strutture concatenate attraverso puntatori e racchiusa tra due NULL che ne definiscono i limiti ?

Furla
01-05-2008, 23:48
perché dici "racchiusa tra due null"? cosa intendi per "come le si percorre"? non si capisce cosa non capisci :p

jobzino
02-05-2008, 02:29
per percorrerlo una volta ke sai di quale vertice ti interessa la lista di adiacenza fai:
edge *e usi un puntatore di appoggio
e=G->adj[VERTICE]

e ti scorri la lista puntata da "e" che sarebbe la testa della lista di adiacenza del vertice (come scorreresti una semplice lista).. se non usi questo puntatore di appoggio perdi la testa della lista di adiacenza del vertice..
Spero di essere stato chiaro
Questo potrebbe aiutarti qui (http://people.na.infn.it/~murano/LASD-learning/lezione-15.pdf) forse ti chiarisci meglio le idee...

misterx
03-05-2008, 14:29
perché dici "racchiusa tra due null"? cosa intendi per "come le si percorre"? non si capisce cosa non capisci :p

niente, è una cavolata priva di senso!
Ho visto poi che si implementa con un array ed un certo numero di liste di adiacenza.
Ora sto vedendo come si implementa la visita in profondità di un grafo e poi in ampiezza, per giungere infine ad implementare Dijkstra.

misterx
03-05-2008, 14:29
per percorrerlo una volta ke sai di quale vertice ti interessa la lista di adiacenza fai:
edge *e usi un puntatore di appoggio
e=G->adj[VERTICE]

e ti scorri la lista puntata da "e" che sarebbe la testa della lista di adiacenza del vertice (come scorreresti una semplice lista).. se non usi questo puntatore di appoggio perdi la testa della lista di adiacenza del vertice..
Spero di essere stato chiaro
Questo potrebbe aiutarti qui (http://people.na.infn.it/~murano/LASD-learning/lezione-15.pdf) forse ti chiarisci meglio le idee...


chiarissimo!