Je suis en train de suivre le Manuel de conception d'algorithmes de Skiena v3.
J'ai vu quelques questions indiquant qu'il y a certaines coquilles dans le livre, et je ne suis pas sûr s'il s'agit de l'une d'entre elles ou simplement parce que je ne peux pas le comprendre.
Considérez ce qui suit:
typedef struct edgenode {
int y; /* info d'adjacence */
int weight; /* poids de l'arête, le cas échéant */
struct edgenode *next; /* arête suivante dans la liste */
} edgenode;
typedef struct {
edgenode *edges[MAXV+1]; /* info d'adjacence */
int degree[MAXV+1]; /* nombre de arcs sortants de chaque sommet */
int nvertices; /* nombre de sommets dans le graphe */
int nedges; /* nombre d'arêtes dans le graphe */
int directed; /* le graphe est-il dirigé ? */
} graph;
void insert_edge(graph *g, int x, int y, bool directed) {
edgenode *p; /* pointeur temporaire */
p = malloc(sizeof(edgenode)); /* allocation du stockage edgenode */
p->weight = 0;
p->y = y;
p->next = g->edges[x];
g->edges[x] = p; /* insertion en tête de la liste */
g->degree[x]++;
if (!directed) {
insert_edge(g, y, x, true);
} else {
g->nedges++;
}
}
D'après ce que je comprends, void insert_edge(graph *g, int x, int y, bool directed)
connecte deux nœuds à l'index du tableau x
et y
en les ajoutant au tableau edges
.
L'extrait suivant me confond:
p->y = y;
p->next = g->edges[x];
g->edges[x] = p; /* insert at head of list */
Comment cela fonctionne-t-il? Supposons que mon entrée soit x = 3, y = 4
, et que c'est la première entrée.
Je m'attendrais à quelque chose comme 3 -> 4
pour un graphe dirigé.
p->y = y;
a tout son sens, l'adjacence dex
esty
.p->next = g->edges[x];
Mais le tableauedges
est initialisé à null. Cela ne fera-t-il pas que3.next == NULL
au lieu de3.next == 4
?g->edges[x] = p;
Quoi?edges[x] == x Node
, cela me perturbe.
Le code complet peut être trouvé sur graph.c et graph.h.
Je pense que p.next = y;
d'une certaine manière et y.next = NULL
pour le moment c'est-à-dire la première insertion. Peut-être que c'est à cause de mon C rouillé mais j'ai besoin d'aide sur ce point.