PDA

Visualizza la versione completa : [C] Eliminare arco da un grafo


Mattia423
09-08-2019, 14:58
Premesse queste definizioni

typedef struct EDGE* EDGELIST;
struct EDGE{
NODE nodo1; //primo nodo dell'arco
NODE nodo2; //altro nodo dell'arco
EDGELIST next; //successivi archi
}

Volevo chiedervi se mi potete aiutare con un programma che elimina un arco da un grafo. Questo Ŕ il programma che ho in mente io, ma pare non funzionare:


void deleteArco(EDGELIST* t, NODE x, NODE y){
if ((*t) != NULL) {
if( t->nodo1 == x && t->nodo2 == y){
EDGELIST p = (*t);
(*t) = (*t)->next;
free(p);
}else
deleteArco((*t)->next, x, y);
}
}

Spero possiate trovare qualche minuto del vostro tempo per aiutarmi perchŔ sono un neofita della programmazione e mi piacerebbe imparare!
Grazie mille

Scara95
16-08-2019, 07:24
Compilando dovresti avere 2 errori e 1 warning che ti dicono chiaramente dove sbagli.

Mattia423
16-08-2019, 10:11
Hai ragione, non so perchŔ non mi desse gli errori, ti ringrazio!
Quindi ecco qui il risultato corretto per˛ comunque fa le bizze e non so se Ŕ un problema del mio compilatore (come per gli errori) o se ho fatto proprio un errore di logica:

void deleteArco(EDGELIST* t, NODE x, NODE y){
if ((*t) != NULL) {
if( (*t)->nodo1 == x && (*t)->nodo2 == y){
EDGELIST p = (*t);
(*t) = (*t)->next;
free(p);
}else
deleteArco(&(*t)->next, x, y);
}
}

Comunque grazie ancora @scara95

Scara95
16-08-2019, 23:16
A me funziona correttamente: https://ideone.com/0KtI17

Mattia423
17-08-2019, 09:22
Invece ho capito perchŔ a me da problemi. Ho letto su un libro di testo che se uso free(p) senza prima aver generato p con "malloc" allora pu˛ dare problemi.
Comunque ti ringrazio per la tua disponibilitÓ, sei stato davvero molto gentile, ti devo una birra :-D

Loading