删除图形数据结构中的重复边

时间:2019-06-04 15:41:14

标签: c graph

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

0 个答案:

没有答案