Prim最小生成树算法

原创 2007年09月19日 13:51:00

MST-PRIM(G, w, r)
// G: graph, w: weight,  r:root 
1  for each u V [G]
 2       do key[u]  
 3          π[u]  NIL
 4  key[r]  0
 5   Q  V [G]
 6   while Q  Ø
 7       do u  EXTRACT-MIN(Q)
 8          for each v  Adj[u]
 9              do if v  Q and w(u, v) < key[v]
10                    then π[v]  u
11                         key[v]  w(u, v)

Prim's algorithm works as shown in the figure:
http://p.blog.csdn.net/images/p_blog_csdn_net/touzani/303255/o_prim.JPG
// MST  set实现最小优先级队列
#include <vector>
#include 
<set>

int MST_PRIM(const vector<vector<pair<intint> > > & G)
/*
  • index start from 1 to n and
  • G.size() -1 is the number of vertices in our graph
  • G[i].size() is the number of vertices directly reachable from vertex with index i
  • G[i][j].first is the index of j-th vertex reachable from vertex i
  • G[i][j].second is the length of the edge heading from vertex i to vertex G[i][j].first 
         return the minimum cost of the spanning tree
*/
{
    
int n = G.size();
    vector
<int> key (n, 987654321);
    vector
<bool> belongQ(n, 1);
    key[
1]=0;
    
set<pair<intint> > Q;
    
for(int i=1; i<n; i++
        Q.insert(make_pair(key[i], i));
    
while (!Q.empty()) {
        
int u=Q.begin()->second;
        Q.erase(Q.begin());
        belongQ[u]
=false;
        
for(int i=0; i< G[u].size(); i++{
            
int v = G[u][i].first;
            
if(belongQ[v] && G[u][i].second < key[v]) {
                Q.erase(Q.find(make_pair(key[v], v)));
                key[v]
=G[u][i].second;
                Q.insert(make_pair(key[v], v));
            }

        }

    }
 
    
int res=0;
    
for(int i=1; i < n; i++
        res
+=key[i];
    
return res;
}
 
题目:http://acm.pku.cn/JudgeOnline/problem?id=1251 jungle roads   
            http://acm.pku.cn/JudgeOnline/problem?id=1287 Networking

最小生成树Prim算法理解

MST(Minimum Spanning Tree,最小生成树)
  • yeruby
  • yeruby
  • 2014年08月16日 18:49
  • 84149

Prim最小生成树算法详解以及java实现源代码

1.Prim算法核心思想 prim算法也是贪婪算法的一个典型例子,有点类似于dijkstra算法。核心思想:将点分为两拨,已经加入最小生成树的,未加入的,找到未加入中距离集合最近的点,添加该点,修改其...
  • tingting256
  • tingting256
  • 2016年01月06日 18:41
  • 2905

数据结构:最小生成树--Prim算法

最小生成树 给定一无向带权图,顶点数是n,要使图连通只需n-1条边,若这n-1条边的权值和最小,则称有这n个顶点和n-1条边构成了图的最小生成树(minimum-cost spanning ...
  • zhangxiangDavaid
  • zhangxiangDavaid
  • 2014年08月05日 00:30
  • 10032

java GUI实现prim最小生成树算法

  • 2016年01月17日 22:52
  • 13KB
  • 下载

用c++实现的图论中的prim最小生成树算法

  • 2011年05月13日 00:09
  • 1KB
  • 下载

最小生成树算法(prim,kruskal)

  • 2010年03月03日 15:43
  • 324KB
  • 下载

图的深度优先搜索,广度优先搜索,最小生成树算法,包括kruskal、prim算法的C++实现代码

  • 2016年04月27日 21:04
  • 1.09MB
  • 下载

最小生成树算法(Prim+Kruskal)

Prim算法: 首先任取一个点u加入最小生成树 1)更新从其他点v出发到u的距离储存在dist中 2)然后选一个dist值最小的点u(1)再收入到最小生成树中,再重复1) 当点全部收录最小生成...
  • qq_34446253
  • qq_34446253
  • 2016年08月15日 16:34
  • 89

python实现prim 最小生成树算法

1.按照Prim 方法,从顶点1 出发,该网的最小生成树的产生过程如图: 2.代码: ''' #file:py_prim.py #最小生成树 prim算法的python实现 普里...
  • playboyNo
  • playboyNo
  • 2012年08月04日 12:50
  • 3771

JAVA实践优化Prim最小生成树算法

前言前一个版本实现的Prim算法使用邻接矩阵+遍历矩阵搜索顶点的Prim最小生成树算法http://blog.csdn.net/xubaifu1997/article/details/52037246...
  • xubaifu1997
  • xubaifu1997
  • 2016年07月29日 20:20
  • 339
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Prim最小生成树算法
举报原因:
原因补充:

(最多只允许输入30个字)