Comment créer une liste de contiguïté d’un graphe dirigé en C?

EDIT: Personne n’a encore répondu, mais je pense que cela a à voir avec la façon dont je stocke ma liste. À l’heure actuelle, je stocke chaque sumt dans un tableau de nœuds appelé G. Cependant, je pense que je dois en faire un tableau à deux dimensions afin de ne pas écraser les données des autres nœuds. (Ceci est très déroutant)

Comme le titre l’indique, j’essaie de créer un graphe dirigé. Je rencontre un problème dans lequel chaque fois que j’essaie d’append un nœud à la liste de contiguïté d’un sumt, il modifie la liste d’un sumt précédent. Par exemple, j’ai un graphe dirigé simple avec ces arêtes. (Parent, enfant)

(2,1)

(3,2)

(3,4)

(5,1)

Lorsque j’essaie d’append le sumt 4 à la liste des adjacences du sumt 3, je finis par changer le sumt 2. Je dois aller de 3 -> 2 -> 4 sans modifier le sumt 2. Je ne sais pas comment faire. Voici mon code

Node* create_graph(Edge* E, int numbVertices, size_t size){ int i, j=0; Node* G = (Node*)malloc(sizeof(Node) * numbVertices); G[0].vertex = 0; G[0].next = NULL; for(i=1;i<numbVertices;i++){ G[i].e = 0; G[i].vertex = i; G[i].next = NULL; for(j=0;j<size;j++){ if((E[j].p) == i){ /* If a parent vertex in the list of edges E matches i *value we insert child vertex (E[j].c) of that edge *into the adjacency list */ insert(i,G,E[j]); } } } return G; } 

Cette fonction suivante est appelée dans la fonction précédente. REMARQUE: dans l’insertion, E représente une seule arête, tandis que dans create_graph, E représente une liste de toutes les arêtes.

 void insert(int i, Node* G, Edge E){ Node* buffer; Node* new; new=(Node*)malloc(sizeof(Node)); new->e = new->e + 1; new->next = &G[Ec] //Here we make sure new node points to child of our edge new->vertex = Ep int s; //If this is the first time the vertex is visited the //adj list will be empty hence e will equal 0 if(G[i].e == 0){ G[i] = *new; } else{ /* When this condition is met it means the adj list is not empty *and we need to go to the end of the list and add out child vertex *The for loop executes e times which = number of items in adj list */ buffer = &G[i]; for(s=0; se); s++){ buffer = buffer->next; } new->vertex = Ec; buffer->next = new; } }