普里姆算法用于生成最小生成树(简易版本)
发布时间
阅读量:
阅读量
普里姆算法在构建最小生成树时,其核心思想与之前介绍的迪杰斯特拉算法存在相似之处,同样采用了dis数组这一数据结构。然而,与迪杰斯特拉算法存在显著差异的是,在之前的最短路径问题中,dis数组用于记录源点到各顶点的最短距离,在每一轮循环中寻找离源点最近的顶点,并将其纳入已确定最短路径的集合中,同时进行标记。随后根据该顶点对其他未确定顶点的距离进行松弛操作。而在普里姆算法中,对dis数组进行松弛时,只需判断与当前找到的最近顶点相连的其他顶点的距离是否小于初始源点到该顶点的直接距离,若满足条件则进行松弛操作即可。其余步骤与迪杰斯特拉算法基本一致。我们不禁会思考为何此处不需要像迪杰斯特拉算法那样考虑之前累积的距离值进行判断,原因在于迪杰斯特拉算法关注的是从源点出发到各个顶点的最短路径长度,而普里姆算法的目标是寻找连接已构造最小生成树与其他未加入节点之间的最短边长度。无论该节点是否为源点本身,在此过程中仅需依据当前找到的最近节点来进行距离更新操作即可,并不需要额外叠加先前的距离信息。
#include <bits/stdc++.h>
using namespace std;
#define inf 0x3f3f3f
int N,M;
int dis[100],G[100][100],book[100];/
全部评论 (0)
还没有任何评论哟~
