我已将此当前的Graph数据结构读入内存。
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。所以我有两倍的边,因为我有重复。你能帮忙的话,我会很高兴。这是我的第一篇文章。谢谢