HDU 1863 畅通工程(最小生成树prim算法)

来源:互联网 发布:天锁斩月淘宝 编辑:程序博客网 时间:2024/03/29 04:50

求MST的一般算法可描述为:针对图G,从空树T开始,往集合T中逐条选择并加入n-1条安全边(u,v),最终生成一棵含n-1条边的MST。

  当一条边(u,v)加入T时,必须保证T∪{(u,v)}仍是MST的子集,我们将这样的边称为T的安全边。

  用伪代码可将算法描述为:

  GenerieMST(G){//求G的某棵MST

  T〈-¢; //T初始为空,是指顶点集和边集均空

  while T未形成G的生成树 do{

  找出T的一条安全边(u,v);//即T∪{(u,v)}仍为MST的子集

  T=T∪{(u,v)}; //加入安全边,扩充T

  }

  return T; //T为生成树且是G的一棵MST

  }

  注意:

  下面给出的两种求MST的算法均是对上述的一般算法的求精,两算法的区别仅在于求安全边的方法不同。

  为简单起见,下面用序号0,1,…,n-1来表示顶点集,即是:

  V(G)={0,1,…,n-1},

  G中边上的权解释为长度,并设T=(U,TE)。