Kruscal算法

一个无向图,寻找最小代价生成树:

Kruscal算法_第1张图片

Kruscal算法_第2张图片 结果
#include 
#include 
#include 
#include 
#include  
using namespace std;
struct edge{
    int fromvex;
    int endvex;
    int weight;
    edge(int fv,int ev,int we):fromvex(fv),endvex(ev),weight(we){}
};
bool compare(edge a,edge b)
{
    return a.weight
std::ostream& operator<<(std::ostream& os, const std::vector& vec)
{
    for (auto& el : vec)
    {
        os << el << ' ';
    }
    return os;
}
std::ostream& operator<<(std::ostream& os, const edge & vec)
{
    os< edgeInfo{edge(4,5,25),edge(0,5,23),
                      edge(3,4,20),edge(0,1,18),
                      edge(3,5,15),edge(1,5,12),
                      edge(2,3,10),edge(1,3,8),
                      edge(1,2,5),edge(0,4,4)};//unsorted graphic edgeset
    
    sort(begin(edgeInfo),end(edgeInfo),compare);//  sorted graphic edgeset by weight
    
    vector kruscal;
    vector> connectedCom;//different connected component
    //init connected commponent
    //Total 6 graph vertices
    int vernumber = 6;
    for(int i = 0;i a{i};
        connectedCom.push_back(a);
    }
    
    int k = vernumber - 1;// k edge is needed in mininum cost spanning tree
    int index = 0;// which edge in sorted edge
    int m1 = 0,m2 = 0;
    while(k>0)
    {
        //serach edgeInfo[index].fromvex and endvex in different connectedCom
        for(size_t i = 0;i in connectedCom sets
            connectedCom[m1].clear();
        }
        //next edge 
        index++;
    }
    cout<

 结果:

 

1、今天重新复习了一下kruscal算法,并且使用了C++复现了算法过程。

2、对于最小生成树的算法还有prim算法。

3、重点在于:

(1)根据权重排序。

(2)判断新的edge的fromvex和endvex是否出现在同一个连通域里面。(每个连通域不能出现回路)

(3)每两个连通域合在一起,就要消除其中一个连通域。

 

 

 

 

你可能感兴趣的:(C++)