Найти общее ребро на графике (C) - PullRequest
0 голосов
/ 22 апреля 2020

У меня есть следующие функции:

Создать график

 struct Graph* createGraph(int V) { 
 struct Graph* graph = 
 (struct Graph*) malloc(sizeof(struct Graph)); 
 graph->V = V; 
 graph->array = 
(struct AdjList*) malloc(V * sizeof(struct AdjList)); 
int i; 
for (i = 0; i < V; ++i) 
    graph->array[i].head = NULL; 
return graph; } 

Добавить ребро

void addEdge(struct Graph* graph, int src, int dest){ 
struct AdjListNode* newNode = newAdjListNode(dest); 
newNode->next = graph->array[src].head; 
graph->array[src].head = newNode; 
newNode = newAdjListNode(src); 
newNode->next = graph->array[dest].head; 
graph->array[dest].head = newNode;} 

Печать графика

void printGraph(struct Graph* graph){ 
int v; 
for (v = 0; v < graph->V; ++v) 
{ 
    struct AdjListNode* pCrawl = graph->array[v].head; 
    printf("\n Adjacency list of vertex %d head -> ", v); 
    while (pCrawl) 
    { 
        printf("[%d] ", pCrawl->dest); 
        pCrawl = pCrawl->next; 
    } 
    printf("\n"); } } 

С помощью этих функций у меня получится следующий правильный вывод:

 Adjacency list of vertex 0 head -> [4] [1]  
 Adjacency list of vertex 1 head -> [4] [3] [2] [0]
 Adjacency list of vertex 2 head -> [3] [1]
 Adjacency list of vertex 3 head -> [4] [2] [1]
 Adjacency list of vertex 4 head -> [3] [1] [0]

Я хочу создать функцию, в которой я смогу подсчитать все ребра на этом графике.

Здесь вы можете увидеть, что общее ребро равно 7

. Я сделал этот код:

int counttotalEdges(struct Graph* graph){
 int v,sum;
 sum = 0;
    for (v = 0; v < graph->V; ++v) 
    { 
       struct AdjListNode* pCrawl = graph->array[v].head; 
        while (pCrawl) 
    {  
        sum = sum + 1;
        pCrawl = pCrawl->next; 
    } 
}
return sum; }

и вывел:

The total Edges in graph are : 14

, что неверно, поскольку некоторые ребра считаются более одного раза.

Правильный вывод должен быть 7

Как я могу это исправить?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...