Prim 算法属于贪心算法。

#include <stdio.h>
#define VERTEXNUM 7
#define INF 10000 typedef struct Graph {
int vertex[VERTEXNUM];
int edge[VERTEXNUM][VERTEXNUM];
} Graph; void initGraph(Graph* G) {
int i, j;
int init[][3] = {{1, 2, 10}, {1, 3, 8}, {1, 6, 20},
{2, 3, 3}, {2, 5, 30}, {3, 4, 18},
{3, 6, 7}, {4, 5, 2}, {6, 7, 1}};
for (i = 0; i < VERTEXNUM; i++) {
G->vertex[i] = 'a' + i;
for (j = 0; j < VERTEXNUM; j++) {
G->edge[i][j] = INF;
}
}
for (i = 0; i < 9; i++) {
G->edge[init[i][0] - 1][init[i][1] - 1] = init[i][2];
G->edge[init[i][1] - 1][init[i][0] - 1] = init[i][2];
}
} void prim(Graph* G) {
int parent[VERTEXNUM];
int selected[VERTEXNUM];
int nearest[VERTEXNUM];
int i, j, k, lastVer, min;
for (i = 0; i < VERTEXNUM; i++) {
parent[i] = -1;
selected[i] = 0;
nearest[i] = INF;
}
lastVer = 0;
// selected[0] = 1;
for (i = 0; i < VERTEXNUM; i++) {
if (G->edge[0][i] < INF) {
parent[i] = 0;
nearest[i] = G->edge[0][i];
}
}
for (i = 1; i < VERTEXNUM; i++) {
min = INF;
if (selected[lastVer] == 1)
continue;
selected[lastVer] = 1;
for (j = 0; j < VERTEXNUM; j++) {
if (G->edge[lastVer][j] < nearest[j]) {
parent[j] = lastVer;
nearest[j] = G->edge[lastVer][j];
}
}
for (j = 0; j < VERTEXNUM; j++) {
if (selected[j] != 1 && nearest[j] < min) {
min = nearest[j];
lastVer = j;
}
}
printf("lastVer: %d\n", lastVer);
}
}
int main () {
Graph G;
initGraph(&G); prim(&G);
return 0;
}

【算法与数据结构】图的最小生成树 MST - Prim 算法的更多相关文章

  1. C++编程练习(10)----“图的最小生成树“(Prim算法、Kruskal算法)

    1.Prim 算法 以某顶点为起点,逐步找各顶点上最小权值的边来构建最小生成树. 2.Kruskal 算法 直接寻找最小权值的边来构建最小生成树. 比较: Kruskal 算法主要是针对边来展开,边数 ...

  2. 数据结构与算法--最小生成树之Prim算法

    数据结构与算法--最小生成树之Prim算法 加权图是一种为每条边关联一个权值或称为成本的图模型.所谓生成树,是某图的一棵含有全部n个顶点的无环连通子图,它有n - 1条边.最小生成树(MST)是加权图 ...

  3. 算法学习记录-图——最小生成树之prim算法

    一个连通图的生成树是一个极小的连通子图,它包含图中全部的顶点(n个顶点),但只有n-1条边. 最小生成树:构造连通网的最小代价(最小权值)生成树. prim算法在严蔚敏树上有解释,但是都是数学语言,很 ...

  4. 24最小生成树之Prim算法

    最小生成树的Prim算法 思想:采用子树延伸法 将顶点分成两类: 生长点——已经在生成树上的顶点 非生长点——未长到生成树上的顶点 使用待选边表: 每个非生长点在待选边表中有一条待选边,一端连着非生长 ...

  5. 最小生成树之Prim算法--蓝白点思想

    Prim算法: 以前一直不是很明白,Prim算法,今天就来终结一下. Prim算法采用与Dijkstra.Bellman-Ford算法一样的“蓝白点”思想:白点代表已经进入最小生成树的点,蓝点代表未进 ...

  6. 最小生成树的Prim算法

       构造最小生成树的Prim算法    假设G=(V,E)为一连通网,其中V为网中所有顶点的集合,E为网中所有带权边的集合.设置两个新的集合U和T,其中集合U用于存放G的最小生成树的顶点,集合T用于 ...

  7. hdu 1233 还是畅通工程 最小生成树(prim算法 + kruskal算法)

    还是畅通工程                                                                            Time Limit: 4000/2 ...

  8. hihocoder 1097 最小生成树一·Prim算法

    #1097 : 最小生成树一·Prim算法 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 最近,小Hi很喜欢玩的一款游戏模拟城市开放出了新Mod,在这个Mod中,玩家可 ...

  9. Hihocoder 之 #1097 : 最小生成树一·Prim算法 (用vector二维 模拟邻接表,进行prim()生成树算法, *【模板】)

    #1097 : 最小生成树一·Prim算法 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 最近,小Hi很喜欢玩的一款游戏模拟城市开放出了新Mod,在这个Mod中,玩家可 ...

随机推荐

  1. zabbix修改默认字体

    在zabbixweb界面里有时候显示界面为框框 所以修改默认字体 现在windows里  随便找个字体: win+R  搜fonts 然后随便复制了一个字体,传到zabbix服务器里 cp calib ...

  2. Linux下单机部署ELK日志收集、分析环境

    一.ELK简介 ELK是elastic 公司旗下三款产品ElasticSearch .Logstash .Kibana的首字母组合,主要用于日志收集.分析与报表展示. ELK Stack包含:Elas ...

  3. element-ui升级笔记;echarts图表100px问题

    1.element-ui的2.7以后的版本支持树形table结构的数据,考虑优化一下表格,就升级了,但是升级到最新的版本2.12发现table都出不来了,于是降级到2.7.目前功能正常,2.12的bu ...

  4. Codeforces 899 1-N两非空集合最小差 末尾最多9对数计算 pair/链表加优先队列最少次数清空

    A /*Huyyt*/ #include<bits/stdc++.h> #define mem(a,b) memset(a,b,sizeof(a)) #define pb push_bac ...

  5. Spring Boot 整合 AOP

    一.示例 1.依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId& ...

  6. SpringMVC @RequestMapping注解详解

    @RequestMapping 参数说明 value:定义处理方法的请求的 URL 地址.(重点) method:定义处理方法的 http method 类型,如 GET.POST 等.(重点) pa ...

  7. dubbo网关

    https://blog.csdn.net/Paranoia_ZK/article/details/90743432 springcloud 和 dubbo 混用

  8. python爬虫及结巴分词《攀登者》影评分析

    <攀登者>影评爬取及分析 0.项目结构 其中simkai.ttf为字体文件,Windows查看系统自带的字体 C:\Windows\Fonts 一.爬取豆瓣影评数据 # -*- codin ...

  9. 【NOIP2016提高A组五校联考1】道路规划

    题目 分析 我们考虑,当现在有一个合法的集合时,如何往里面增加一个点,使这个集合仍然合法. 假设现在有一个合法的集合, 那么当我们加入一个点,它的道路穿过来整个集合,那么 然后搞一遍最长下降子序列就可 ...

  10. VSCode编辑器用户设置

    {"gitlens.advanced.messages": {"suppressCommitHasNoPreviousCommitWarning": false ...