migliorabile ha scritto:
Ma stiamo parlando di MATRICE DI ADIANCENZA o LISTA DI ADIACENZA:
NON E' LA STESSA COSA!
Certo che non sono la stessa cosa! Stiamo parlando di entrambi.. La lista di adiacenza ho capito come implementarla.
Se e' una LISTA di adiacenza, i tuoi puntatori non dovrebbero essere di tipo VOID.
Oppure possono essere di tipo VOID, ma la TUA funzione di controllo delle adiacenze SA ESATTAMENTE di che tipo e' il puntatore: riceve un VOID ma lo casta al tipo corretto.
esatto! e io ho fatto il secondo modo.
Se e' una MATRICE di adiacenza, stai sbagliando TOTALMENTE implementazione.
Infatti in questo caso non riesco a trovare neanche il principio dell'implementazione!
Quindi il mio problema sta nell'implementare appunto la rappresentazione con matrice di adiacenza, di un grafo i cui nodi siano una struttura generica.
Sia ad esempio in una libreria graph (in cui tutte le funzioni utilizzeranno il void* tramite gli opportuni puntatori a funzione per i due tipi di implementazione a cui farò corrispondere due differenti librerie)
typedef struct graph{
int size;
void * graphAdt;
}graph;
per quanto riguarda le liste di adiacenza, ho pensato ad una struttura di questo tipo:
#define CAPACITY 10;
typedef struct node{
void * key; //tipo generico
char color; // 'b','g','n, //per le visite di ampiezza e profondità
// double p; // IL PESO E' SULL'ARCO NON SUL NODO!!!!! //trovare soluzione
struct node * adj; //next
}node;
typedef struct graphList{
int capacity;
int size; //indice corrente
struct node ** list; //array di liste di node
}graphList;