Возникли проблемы с ребрами в неориентированном графе для списка смежности C

Я пытался создать список Аджанси с неориентированным графиком. Все идет гладко, за исключением случаев, когда мне нужно, чтобы узел (или вершина, как в моем коде) имел несколько ребер, связанных с ним. У меня есть 6 вершин A,B,C,D,E,F, и есть только ребра от A до B, от A до C, от A до D, вот как это выглядит концептуально. Я пытался снова и снова придумать алгоритм для объединения нескольких ребер, я не могу понять это. Вот мои структуры для справки, и где мое утверждение else - это то, где мне нужно пройти до конца связанных ребер и прикрепить новое ребро.

typedef struct
{
    char c;
    bool isVisited;
    struct EDGETAG* p;
} VERTEX;

typedef struct EDGETAG
{
    VERTEX* v;
    struct EDGETAG* next;
} EDGE;

//~~~~~~~~
while( fgets(data,sizeof(data),filePtr) && elements < 50)
    {
        startPtr = data;
        EDGE* e  = (EDGE*)malloc(sizeof(EDGE));
        //first character
        int breakLogic = 0;
        int i;

        for( i = 0; i < 50; i++)
        {
            if(map[i].c == *startPtr)
            {
                elements = i;
                break;
            }
        }
        //first character
        map[elements].c = *startPtr;
        printf("%i %c\n",elements,map[elements].c);
        //point first character to edge
        if(map[elements].p == NULL)
        {
            map[elements].p = e;
        }
        else
        {
             /*Here is where I need help*/
        }

        startPtr += 2;

        for( i = 0; i < 50; i++)
        {
            if(map[i].c == *startPtr)
            {
                elements = i;
                breakLogic = 1;
                break;

            }

        }
        if( breakLogic == 0)
        {
            elements++;
        }
        //second character
        map[elements].c = *startPtr;
        printf("%i %c\n",elements,map[elements].c);
        //point edge to second character
        e -> v = &map[elements];
        e -> next = NULL;
        //loops at the newline

        elements++;
    }

}

0 ответов

Другие вопросы по тегам