Удалить дублирующиеся края в структуре данных графика - PullRequest
0 голосов
/ 04 июня 2019

У меня есть текущая структура данных графика, считанная в память.

struct Edge
{
    char s; // source
    char d; // destination
    int w; // weight
};

struct Graph
{
    int v; //number of vertices
    int e; //number of edges
    struct Edge* edge;
};

После прочтения на моем графике, это следующие компоненты:

<A, B, 2> <A, F, 9> <A, G, 5> <B, A, 2> <B, C, 4> <B, G, 6> <C, B, 4> <C, D, 2> <C, H, 5> <D, C, 2> <D, E, 1> <D, H, 1> <E, D, 1> <E, F, 6> <E, I, 3> <F, A, 9> <F, E, 6> <F, I, 1> <G, A, 5> <G, B, 6> <G, H, 5> <G, I, 2> <H, C, 5> <H, D, 1> <H, G, 5> <H, I, 4> <I, E, 3> <I, F, 1> <I, G, 2> <I, H, 4>

Однако, поскольку этот график симметриченМне нужна только половина ребер, потому что есть дубликаты.

Как удалить несколько ребер?

Например, я знаю [A, B, 2] и [B, A, 2] являются одним и тем же краем.Я могу удалить [B, A, 2].

Ниже приведен код, который, как я думал, будет работать, но не работает:

int remove_dups(struct Graph * graph1, struct Graph * graph)
{
  int i = 0;
  int j = 1;

for(i; i < N; i++)
{
    for(j; j < N; j++)
    {
        if(graph->edge[i].s == graph1->edge[j].d || graph->edge[i].d == graph1->edge[j].s)
            free(graph1->edge[i]);
    }
 } 
}

С чего мне начать делать это?Я знаю, что у моего графа 15 ребер, потому что 30/2 = 15. Поэтому у меня вдвое больше ребер, чем мне нужно, потому что у меня есть дубликаты.Любая помощь будет хорошей.Это мой первый пост.Спасибо

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