У меня есть текущая структура данных графика, считанная в память.
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. Поэтому у меня вдвое больше ребер, чем мне нужно, потому что у меня есть дубликаты.Любая помощь будет хорошей.Это мой первый пост.Спасибо