5.3图的综合应用算法

一.最小生成树算法

1.概念(Minimum-Spanning-Tree)MST

生成树:针对于连通图,包含全部顶点,去掉一条边后不连通,加一条边形成环
最小生成树:带权连通无向图,边的权值之和最小的生成树(MST)

2.普里姆Prim算法(顶点)

从一个顶点开始出发,选择这个顶点代价最小的顶点进行构造,重复执行,一直到所有顶点全部进入生成树中
只关注顶点,,时间复杂度:O(|V|)
适合边稠密图

//伪代码核心
1.节点入树数组
isJoint[v];
2.用于更新各顶点的代价地图
lowCost[v];

5.3图的综合应用算法_第1张图片

3.Kruskal最小生成树算法(边)

算法执行过程:
从代价最小的一条边出发,选择最小的两端顶点未连接的边,不断重复,直到把全部顶点装入生成树中
只关注边,时间复杂度O(|E|log2|E|)
适合边稀疏图
5.3图的综合应用算法_第2张图片

二、最短路径生成算法

1.BFS寻找无向不带权图最短路径

适用于无权无向图寻找最短路径

相关代码原理:

d[i]:表示从u到i结点的最短路径
path[i]:最短路径从哪个顶点过来**
bool visited[MAX_VERTEX_NUM]; //记录该节点是否访问过

    void BFS_MIN_Distance(Graph G, int u)
    {
        for (i = 0; i < G.vexnum; ++i)
        {
            d[i] = 无穷       //初始化路径长度
            path[i] = -1; //最短路径从哪个顶点过来
        }
        d[u] = 0;
        visited[u] = TRUE;
        EnQueue(Q, u);
        while (!= isEmpty(Q))
        {
            DeQueue(Q, u);
            for (w = FirstNeighbor(G, v); w >= 0; w = NextNeighbor)
            {
                if (!visited[w])
                {
                    d[w] = d[u] + 1;
                    path[w] = u;
                    visited[w] = TRUE;
                    EnQueue(Q, w);
                }
            }
        }    

你可能感兴趣的:(Alogrithm,算法)