最短路径之prime算法

2021-03-08 17:31

阅读:512

标签:复杂度   ++   时间   顶点   include   递归   ret   生成   初始   

prime算法与dijkstra算法非常相似,主要区别是更新连接路径时,prime中是跟踪接下来的结点到生成树中的最小交叉边,而dijkstra中是跟踪接下来的结点到
起点所有经过的结点的路径和,这个算法也能算出花最少的钱去把各个村庄连接起来。

算法描述:

普利姆算法求最小生成树时候,和边数无关,只和定点的数量相关,所以适合求稠密网的最小生成树,时间复杂度为O(n*n)。
算法过程:
1.将一个图的顶点分为两部分主要,一部分是最小生成树中的结点(A集合),另一部分是未处理的结点(B集合)。
2.首先选择一个结点,将这个结点加入A中,然后,对集合A中的顶点遍历,找出A中顶点关联的边权值最小的那个(设为v),将此顶点从B中删除,加入集合A中。
3.递归重复步骤2,直到B集合中的结点为空,结束此过程。
4.A集合中的结点就是由Prime算法得到的最小生成树的结点,依照步骤2的结点连接这些顶点,得到的就是这个图的最小生成树。

算法实现具体过程:
1.将第一个点放入最小生成树的集合中。
2.从第二个点开始,初始化为跟1点相连(仅仅相连)的边的权值)。
3.找最小权值的边。
从第二点开始遍历,如果不是最小生成树的集合的点,则找出从2到n的最小权值)。
4.将找出来的最小权值的边的顶点加入最小生成树的集合中,权值相加。
5.更新集合。
6.循环上述步骤,指导将全部顶点加入到最小生成树集合为止。

include

#include 

int n,a[101][101];//输入已知两个点的距离 
int ans[101];//用来记录一个未知点到一群已知点的一个最短距离 
int answer;
bool in[101];//标记数组,数组元素初始值全为0 

void prime(int n)
{
	for (int i=1;i

最短路径之prime算法

标签:复杂度   ++   时间   顶点   include   递归   ret   生成   初始   

原文地址:https://www.cnblogs.com/tzp-empty-hya/p/14195094.html


评论


亲,登录后才可以留言!