skynet ha scritto:
E' + complicato a spiegarlo a parole che a farlo, cmq una rappresentazione è questa.
#include <iostream>
#define MAX 10
struct lista_add
{
char * arco_collegamento;
lista_add *next;
};
struct nodo
{
char info;
lista_add *listaAddiacenze;
}nodo_p;
class vla
{
private :
int numElementi;
nodo vet[MAX];
bool pieno;
int supporto(nodo*);
void stampa_la_lista(char);
public :
int controlla(char);
vla();
void inserisci(char);
void inserimento_lista(char,char);
int conta_nodi();
bool get_pieno();
bool controlla_pieno();
void set_resetta(int);
int cerca_elemento(char elem);
void stampa();
void stampa_listaAdd(char elem);
~vla();
};
vla::vla()
: numElementi(0)
, pieno(false)
{
}
vla::~vla()
{
}
void vla::inserimento_lista(char elem,char elemento)
{
int i = cerca_elemento(elem);
if(i != -1)
{
int j = cerca_elemento(elemento);
if(vet[i].listaAddiacenze == NULL)
{
if(j != -1)
{
vet[i].listaAddiacenze = new (lista_add);
vet[i].listaAddiacenze->arco_collegamento = &(vet[j].info);
vet[i].listaAddiacenze->next = NULL;
}
}
else
{
lista_add *ptr = vet[i].listaAddiacenze;
while(ptr->next != NULL)
ptr = ptr->next;
ptr->next = new (lista_add);
ptr->next->arco_collegamento = &(vet[j].info);
ptr->next->next = NULL;
}
}
}
int vla::cerca_elemento(char elem)
{
for(int i = 0; i < MAX; i++)
{
if(vet[i].info == elem)
return i;
}
return -1;
}
void vla::inserisci(char elemento)
{
if(get_pieno())
{
std::cout << "Vettore pieno non posso inserire altri elementi";
return;
}
vet[numElementi].info = elemento;
vet[numElementi].listaAddiacenze = NULL;
numElementi++;
pieno = controlla_pieno();
}
bool vla::get_pieno(void)
{
return pieno;
}
bool vla::controlla_pieno()
{
return (numElementi > MAX);
}
void vla::stampa_listaAdd(char elem)
{
int i = cerca_elemento(elem);
if(i != -1)
{
lista_add *ptr = vet[i].listaAddiacenze;
std::cout << "lista addiacenze di " << vet[i].info << " e\': \t";
while(ptr != NULL)
{
std::cout << *(ptr->arco_collegamento) << ", ";
ptr = ptr->next;
}
}
}
int main(int argc, char *argv[])
{
vla v;
v.inserisci('a');
v.inserisci('b');
v.inserisci('c');
v.inserimento_lista('a','b');
v.inserimento_lista('a','c');
v.stampa_listaAdd('a');
}
Come output hai:
lista addiacenze di 'a' è: b, c
Ciao, sto utilizzando il tuo codice per la creazione di un grafo con liste di adiacenza...in precedenza ho utilizzato le matrici di adiacenza e tutto va bene...
sto avendo dei problemi nella deallocazione della memoria, puoi darmi una mano?
in pratica io acquisisco in input una serie di grafi, uno per ogni riga, ma quando vado ad elaborare le specifiche del mio problema, il programma va in crash...immagino sia dovuto appunto alla mancata deallocazione di memoria...che dovrei fare prima di leggere in input il nuovo grafo, cioè la nuova riga...
Puoi darmi qualche consiglio?
Grazie