/*
prim algorithm
author:wuzuquan
last_modify:2008-1-10
*/
#include<stdio.h>
#include<assert.h>
#include "min_heapsort.h"

#define VNUM 9
#define NIL 100
extern int heap_size;
extern int length=VNUM;
typedef struct
{
 int v;
 int w;
}edge;
/*紧缩邻接表实现赋权无向图*/
edge list[29]={ {1,4},{7,8},
    {0,4},{2,8},{7,11},
    {1,8},{3,7},{5,4},{8,2},
    {2,7},{4,9},{5,14},
    {3,9},{5,10},
    {2,4},{3,14},{4,10},{6,2},
    {5,2},{7,1},{8,6},
    {0,8},{1,11},{6,1},{8,7},
    {2,2},{6,6},{7,7}};
int head[VNUM+1]={0,2,5,9,12,14,18,21,25,28};

void mst_prim(int *parent, int *key, int source)
{
 int u=0;
 int Q[VNUM+1];/*最小优先级队列*/
 assert(parent!=NULL && key!=NULL);/*检查内存是否可用*/
 Q[0]=INT_MAX;
 for (u; u<VNUM; u++)
 {/*initialize,下标从1开始,0位置的元素不使用*/
  key[u]=INT_MAX;
  parent[u]=NIL;
  Q[u+1]=u;
 }

key[source]=0;
 build_min_heap(Q);/*对每一个非叶子结点都调用一次min_heaplfy*/

while (heap_size>0)
 {
  int v=0;
  u=heap_extract_min(Q);/*将最小的关键字出列*/
  for (v=head[u]; v<head[u+1]; v++)
  {
   char vertex=list[v].v;
   if (vertex >= minimum(Q) && list[v].w < key[vertex])
   {
    parent[vertex]=u;
    key[vertex]=list[v].w;
   }
  }
 }
}

void printkey(int *parent, int *key)
{
 int i=0;
 for (i=1; i<VNUM; i++)
 {
        printf("%c--%c: %d/n",i+'a',parent[i]+'a',key[i]);
 }
}

int main()
{
 int key[VNUM];
 int parent[VNUM+1];/*父结点数组*/
 mst_prim(parent,key,0);
 printkey(parent,key);
 return 0;
}

prim algorithm相关推荐

  1. Prim Algorithm(普利姆算法)

    Prim算法介绍 普里姆算法(Prim's algorithm),图论中的一种算法,可在加权连通图里搜索最小生成树.意即由此算法搜索到的边子集所构成的树中,不但包括了连通图里的所有顶点,且其所有边的权 ...

  2. Prim 算法及其高效实现

    转自:ivy-end http://www.ivy-end.com/archives/943 背景 最小生成树(Minimum Spanning Trees),简称MST.是图论中一个非常重要的概念. ...

  3. 算法编程Algos Programming

    算法编程Algos Programming 不同算法的集合,用于编程比赛,如ACM ICPC. 算法按主题划分.大多数算法都可以从文件中按原样运行.每种算法都有一个参考问题,并对其时间和空间复杂度作了 ...

  4. 【POJ 3026】Borg Maze

    [POJ 3026]Borg Maze 一个考察队搜索alien 这个考察队能够无限切割 问搜索到全部alien所须要的总步数 即求一个无向图 包括全部的点而且总权值最小(最小生成树 BFS+最小生成 ...

  5. Greedy is Good

    作者:supernova 出处:http://community.topcoder.com/tc?module=Static&d1=tutorials&d2=greedyAlg Joh ...

  6. POJ1789-Truck History

    全解题报告索引目录 -> [北大ACM – POJ试题分类] 转载请注明出处:http://exp-blog.com -------------------------------------- ...

  7. 数据结构第十二天——普利姆算法和迪杰斯特拉算法

    普利姆(Prim)算法求最小生成树,也就是在包含 n个顶点的连通图中,找出只有(n-1)条边包含所有 n个顶点的连通子图,也就是所谓的极小连通子图 最小生成树:给定一个带权的无向连通图,如何选取一棵生 ...

  8. POJ1258-Agri-Net

    全解题报告索引目录 -> [北大ACM – POJ试题分类] 转载请注明出处:http://exp-blog.com -------------------------------------- ...

  9. 普里姆算法和迪克斯特拉算法

    迪克斯特拉算法         迪杰斯特拉算法(Dijkstra)是由荷兰计算机科学家狄克斯特拉于1959年提出的,因此又叫狄克斯特拉算法.是从一个顶点到其余各顶点的最短路径算法,解决的是有权图中最短 ...

最新文章

  1. LocalDateTime、OffsetDateTime、ZonedDateTime互转,这一篇绝对喂饱你
  2. Waymo自动驾驶报告:平均21万公里一次事故,严重事故都是人类司机的锅
  3. JS获取浏览器高度 并赋值给类
  4. 工作单元php,PHP面向对象中的工作单元是什么
  5. Puzzle (II) UVA - 519
  6. java soot_正确执行3个地址代码的SOOT API
  7. 用SQL实现记录上下移动的思路
  8. 【JMeter】Threads(users)3种类型
  9. linux 如何查看fb中分辨率_西门子S71200,如何在FB块中使用操作定时器?
  10. 阿里云免费试用之体验——阿里云serverECS试用心得
  11. MySQL 5.7.18忘记密码和密码过期解决
  12. grep命令_「Linux」- ps -ef |grep 命令
  13. 海外博士一般朝九晚五,国内博士动辄十几小时科研时间,为什么普遍认为海外博士水平较高?...
  14. 2021年电工(技师)考试内容及电工(技师)复审考试
  15. cryptojs vue 使用_vue 中引入cryptoJS
  16. linux ftps ftp,Linux下ftp+SSL实现ftps
  17. 微信指数:微信关键词搜索热度情况分析!
  18. Android RSASHA加密
  19. mysql查看表内容 很乱_mysql数据表字符混乱问题解决办法
  20. Unity pc端内嵌网页插件Embedded Browser基本使用流程

热门文章

  1. 学会其中一个,轻松日入400+,今日头条隐藏的6大赚钱功能
  2. jupyterlab:Failed to load the jupyterlab-git server extension问题如何解决?
  3. Python如何爬取不确定页数的网页
  4. 好程序员大数据培训分享大数据概述
  5. 【深度学习】NLP自然语言处理
  6. 数据不在有用时进行安全销毁
  7. android做一个音乐播放器,制作一个简单的Android版的音乐播放器
  8. Android Shortcuts使用详解
  9. linux域名通过代理,Haproxy根据域名匹配后端服务器
  10. echarts系列-带图教你调整左右位置x轴样式网格虚线刻度居中双轴Y轴滚动上下移动文字旋转改分割线颜色部分字体改色折注混合,X轴的颜色,X轴字体颜色,调整柱子颜色,调整小图标图例的大小和位置,鼠标