Возникли проблемы с ребрами в неориентированном графе для списка смежности 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++;
}
}