Io ho provato a fare questo tipo di implementazione xhe prevede ,oltre a cio che hai detto tu, anche un vettore di record che contiene le informazioni(nome,tempo,soldi) di ogni citta..secondo te questo tipo di implementazione e efficiente, considerando il fatto che devo fare molte operazioni su queste citta(aggiunta\rimozione di collegamenti,aggiunta\rimozione di citta etc..) .In pratica ogni volta che in input do il nome di una citta, devo effettuare una ricerca in questo vettore di record per cercare la sua chiave corrispondente,perche nella lista delle adiacenze non avro i nomi delle citta ma degli interi che sono appunto le chiavi di queste citta..grazie
typedef struct {
char *nome;
int soldi;
int tempo;
}rec;
typedef struct edge {
int key;
int peso;
struct edge *next;
} edge;
typedef struct graph {
int nv; /* numero di vertici del grafo */
edge **adj; /* vettore con le liste delle adiacenze */
rec *A ; //vettore di record che contiene le informazioni
} graph;
graph *crea_grafo(int n)
{
graph *G; int i;
G = (graph*)malloc(sizeof(graph));
if (G==NULL) printf("\n ERRORE: impossibile allocare memoria per il grafo \n");
else
{
G->adj = (edge**)malloc(n*sizeof(edge*));
G->A=(rec*)malloc(n*sizeof(rec));
if ((G->adj==NULL) && (n>0))
{
printf("\n ERRORE: impossibile allocare memoria per la lista del grafo \n");
free(G);
G=NULL;
}
else
{
G->nv = n;
for (i=0; i<n; i++)
G->adj=NULL;
for (i=0; i<n; i++)
{
printf("\n Inserire il nome della %d citta'",i+1);
scanf("%s",&G->A.nome);
}
}
}
return(G);
}