您的位置:首页 > 其它

基本算法prim学习总结性文章

2016-03-08 19:25 162 查看
Prim算法是最简单也是最直观的求最小生成树的算法,与kruskal相比,具有代码量小的特点,避免了kruskal寻找祖先等复杂数据结构,在ACM比赛中,因为时间紧张,采用prim的情况无疑比kruskal更多。

prim需要的数据结构有:

int miniestPoint; 这轮路径最短的点

int miniestDist; 这轮最短的路径

int currentDist[]; 记录每个点当前的路径长度

bool ifVisited[]; 记录哪些点已经在生成树里了。

int totalLength; 记录生成树总路径长度

prim的基本流程如下:

1.设置一个初始顶点,令初始顶点的ifVisited为true,代表该点已经在生成树里;

2.初始miniestDist为inf,设置miniestPoint为初始顶点;

3.还是进行循环:

for(int i=1;i<=v;i++){
if(ifVisited[i]==false&¤tDist[i]>g[miniestPoint][i]){
currentDist[i]=g[miniestPoint][i];
}
}
miniestDist=inf;
for(int i=1;i<=v;i++){
if(ifVisited[i]==false&¤tDist[i]<miniestDist){
miniestPoint=i;
miniestDist=currentDist[i];
}
}
totalLength+=miniestDist;


直到所有的点都在生成树里面。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: