普里姆算法,克鲁斯卡尔算法

这两种算法都是得出最小生成树的算法,只不过方法不同

普里姆是归并点

而克鲁斯卡尔是归并边


先说普里姆算法

先随意选一个点加入归并点数组之中,然后选出与这个点关联的最小的权的点,输出,并把那个点也加入归并点数组之中,然后再从每一次都从归并点数组之中选一个点道不在这个数组之中的点的最小的权值,再把这个点也加入归并点数组,知道所有的点都在归并点数组之中


•1. 从某顶点 u0 出发,选择与它关联的具有最小权值的边(u0,v),将其顶点加入到生成树的顶点集合U
•2. 每一步从一个顶点在U中,而另一个顶点不在U中的各条边中选择权值最小的边(u, v),把顶点v加入到U
•3. 直到所有顶点都加入到生成树顶点集合U中为止

普里姆算法,克鲁斯卡尔算法_第1张图片


克鲁斯卡尔算法

每次选能让连通分量减一的点的最短的权


•1. 构造一个只有 n 个顶点,没有边的非连通图 T = { V, Æ }, 每个顶点自成一个连通分量
•2. 在 E 中选最小权值的边,若该边的两个顶点落在不同的连通分量上,则加入 T 中;否则舍去,重新选择
•3. 重复下去,直到所有顶点在同一连通分量上为止

普里姆算法,克鲁斯卡尔算法_第2张图片





你可能感兴趣的:(java,最小生成树,普里姆算法,克鲁斯卡尔算法)