Реализация списка смежности графиков (C) - PullRequest
0 голосов
/ 21 мая 2018

Я пытаюсь создать смежное ist представление графа в C, используя следующие определения ...

typedef struct edge
{
    int to_vertex;
    int weight;
} Edge;

typedef struct edgeNode
{
    Edge edge;
    struct edgeNode *next;
} *EdgeNodePtr;

typedef struct edgeList
{
    EdgeNodePtr head;
} EdgeList;

typedef struct graph
{
    int V;
    EdgeList *edges;
} Graph;

Основная функция для создания и добавления всех значений в графе -

    int numEdges;
    int edgeToVertex;
    int weight;
    EdgeNodePtr new_node;
    Graph G;

    EdgeNodePtr current;
    int *inDeg;


    scanf("%d", &G.V);
    G.edges = malloc(G.V * sizeof(EdgeList));

    for (int i = 0; i < G.V; i++)
    {
        scanf("%d", &numEdges);
        G.edges[i].head = NULL;


        for (int j = 0; j < numEdges; j++)
        {
            new_node = malloc(sizeof(*new_node));

            scanf("%d,%d", &edgeToVertex, &weight);
            new_node->edge.to_vertex = edgeToVertex;
            new_node->edge.weight = weight;

            new_node->next = G.edges[i].head;
            new_node = G.edges[i].head;

        }
    }

По какой-то причине я не могу понять, что график не будет создан, и я попытался запустить его, и он добавит узел, но узел всегда будет таким же.Любая помощь приветствуется

1 Ответ

0 голосов
/ 21 мая 2018

Это выглядит странно:

        new_node->next = G.edges[i].head;
        new_node = G.edges[i].head;

при перезаписи new_node с head.

Возможно, вы захотите сделать:

        new_node->next = G.edges[i].head;
        G.edges[i].head = new_node;

, чтобы сделатьhead указывает на новый узел.

...