修改kruskal算法

时间:2019-01-08 23:43:49

标签: c++ algorithm

我需要找到一种算法,该算法可以针对G(V,E)图中的每个边缘查找是否在每个mst,一个mst但不是全部或根本没有mst中插入。我考虑过修改kruskal的算法因此,每次使用find()是否要处理的边形成一个循环,请检查所形成的循环中是否还有另一个权重相同的边。如果同时使用这两个边,则不是所有边都使用。处理不会形成一个周期,将其添加到mst并将其标记为每个mst中包含的周期(不过稍后可能会更改)。

要执行此操作,如果在find()函数之后检测到一个循环,则调用第二次查找,以权重= W处理的边在哪里检查此循环中是否有权重= W的其他边。 最初,我是这样声明我的图的

int V = 4;  // Number of vertices in graph 
    int E = 5;  // Number of edges in graph 
    struct Graph* graph = createGraph(V, E); 




     // add edge 0-1 
        graph->edge[0].src = 0; 
        graph->edge[0].dest = 1; 
        graph->edge[0].weight = 10; 


        // add edge 0-2 
        graph->edge[1].src = 0; 
        graph->edge[1].dest = 2; 
        graph->edge[1].weight = 6; 


        // add edge 0-3 
        graph->edge[2].src = 0; 
        graph->edge[2].dest = 3; 
        graph->edge[2].weight = 5; 


        // add edge 1-3 
        graph->edge[3].src = 1; 
        graph->edge[3].dest = 3; 
        graph->edge[3].weight = 15;


        // add edge 2-3 
        graph->edge[4].src = 2; 
        graph->edge[4].dest = 3; 
        graph->edge[4].weight = 4;

第一个find()函数是:

int find(struct subset subsets[], int i) 
{    
    // find root and make root as parent of i  
    // (path compression) 
    if (subsets[i].parent != i) 
        subsets[i].parent = find(subsets, subsets[i].parent); 

    return subsets[i].parent; 
} 

所以我的问题是,在第二个发现中有一个顶点且它是父对象(假设0-> 3),我如何找到和使用该边缘的权重?

0 个答案:

没有答案