prim algorithm
/*
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相关推荐
- Prim Algorithm(普利姆算法)
Prim算法介绍 普里姆算法(Prim's algorithm),图论中的一种算法,可在加权连通图里搜索最小生成树.意即由此算法搜索到的边子集所构成的树中,不但包括了连通图里的所有顶点,且其所有边的权 ...
- Prim 算法及其高效实现
转自:ivy-end http://www.ivy-end.com/archives/943 背景 最小生成树(Minimum Spanning Trees),简称MST.是图论中一个非常重要的概念. ...
- 算法编程Algos Programming
算法编程Algos Programming 不同算法的集合,用于编程比赛,如ACM ICPC. 算法按主题划分.大多数算法都可以从文件中按原样运行.每种算法都有一个参考问题,并对其时间和空间复杂度作了 ...
- 【POJ 3026】Borg Maze
[POJ 3026]Borg Maze 一个考察队搜索alien 这个考察队能够无限切割 问搜索到全部alien所须要的总步数 即求一个无向图 包括全部的点而且总权值最小(最小生成树 BFS+最小生成 ...
- Greedy is Good
作者:supernova 出处:http://community.topcoder.com/tc?module=Static&d1=tutorials&d2=greedyAlg Joh ...
- POJ1789-Truck History
全解题报告索引目录 -> [北大ACM – POJ试题分类] 转载请注明出处:http://exp-blog.com -------------------------------------- ...
- 数据结构第十二天——普利姆算法和迪杰斯特拉算法
普利姆(Prim)算法求最小生成树,也就是在包含 n个顶点的连通图中,找出只有(n-1)条边包含所有 n个顶点的连通子图,也就是所谓的极小连通子图 最小生成树:给定一个带权的无向连通图,如何选取一棵生 ...
- POJ1258-Agri-Net
全解题报告索引目录 -> [北大ACM – POJ试题分类] 转载请注明出处:http://exp-blog.com -------------------------------------- ...
- 普里姆算法和迪克斯特拉算法
迪克斯特拉算法 迪杰斯特拉算法(Dijkstra)是由荷兰计算机科学家狄克斯特拉于1959年提出的,因此又叫狄克斯特拉算法.是从一个顶点到其余各顶点的最短路径算法,解决的是有权图中最短 ...
最新文章
- LocalDateTime、OffsetDateTime、ZonedDateTime互转,这一篇绝对喂饱你
- Waymo自动驾驶报告:平均21万公里一次事故,严重事故都是人类司机的锅
- JS获取浏览器高度 并赋值给类
- 工作单元php,PHP面向对象中的工作单元是什么
- Puzzle (II) UVA - 519
- java soot_正确执行3个地址代码的SOOT API
- 用SQL实现记录上下移动的思路
- 【JMeter】Threads(users)3种类型
- linux 如何查看fb中分辨率_西门子S71200,如何在FB块中使用操作定时器?
- 阿里云免费试用之体验——阿里云serverECS试用心得
- MySQL 5.7.18忘记密码和密码过期解决
- grep命令_「Linux」- ps -ef |grep 命令
- 海外博士一般朝九晚五,国内博士动辄十几小时科研时间,为什么普遍认为海外博士水平较高?...
- 2021年电工(技师)考试内容及电工(技师)复审考试
- cryptojs vue 使用_vue 中引入cryptoJS
- linux ftps ftp,Linux下ftp+SSL实现ftps
- 微信指数:微信关键词搜索热度情况分析!
- Android RSASHA加密
- mysql查看表内容 很乱_mysql数据表字符混乱问题解决办法
- Unity pc端内嵌网页插件Embedded Browser基本使用流程
热门文章
- 学会其中一个,轻松日入400+,今日头条隐藏的6大赚钱功能
- jupyterlab:Failed to load the jupyterlab-git server extension问题如何解决?
- Python如何爬取不确定页数的网页
- 好程序员大数据培训分享大数据概述
- 【深度学习】NLP自然语言处理
- 数据不在有用时进行安全销毁
- android做一个音乐播放器,制作一个简单的Android版的音乐播放器
- Android Shortcuts使用详解
- linux域名通过代理,Haproxy根据域名匹配后端服务器
- echarts系列-带图教你调整左右位置x轴样式网格虚线刻度居中双轴Y轴滚动上下移动文字旋转改分割线颜色部分字体改色折注混合,X轴的颜色,X轴字体颜色,调整柱子颜色,调整小图标图例的大小和位置,鼠标