【算法与数据结构】图的最小生成树 MST - Prim 算法
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 算法的更多相关文章
- C++编程练习(10)----“图的最小生成树“(Prim算法、Kruskal算法)
1.Prim 算法 以某顶点为起点,逐步找各顶点上最小权值的边来构建最小生成树. 2.Kruskal 算法 直接寻找最小权值的边来构建最小生成树. 比较: Kruskal 算法主要是针对边来展开,边数 ...
- 数据结构与算法--最小生成树之Prim算法
数据结构与算法--最小生成树之Prim算法 加权图是一种为每条边关联一个权值或称为成本的图模型.所谓生成树,是某图的一棵含有全部n个顶点的无环连通子图,它有n - 1条边.最小生成树(MST)是加权图 ...
- 算法学习记录-图——最小生成树之prim算法
一个连通图的生成树是一个极小的连通子图,它包含图中全部的顶点(n个顶点),但只有n-1条边. 最小生成树:构造连通网的最小代价(最小权值)生成树. prim算法在严蔚敏树上有解释,但是都是数学语言,很 ...
- 24最小生成树之Prim算法
最小生成树的Prim算法 思想:采用子树延伸法 将顶点分成两类: 生长点——已经在生成树上的顶点 非生长点——未长到生成树上的顶点 使用待选边表: 每个非生长点在待选边表中有一条待选边,一端连着非生长 ...
- 最小生成树之Prim算法--蓝白点思想
Prim算法: 以前一直不是很明白,Prim算法,今天就来终结一下. Prim算法采用与Dijkstra.Bellman-Ford算法一样的“蓝白点”思想:白点代表已经进入最小生成树的点,蓝点代表未进 ...
- 最小生成树的Prim算法
构造最小生成树的Prim算法 假设G=(V,E)为一连通网,其中V为网中所有顶点的集合,E为网中所有带权边的集合.设置两个新的集合U和T,其中集合U用于存放G的最小生成树的顶点,集合T用于 ...
- hdu 1233 还是畅通工程 最小生成树(prim算法 + kruskal算法)
还是畅通工程 Time Limit: 4000/2 ...
- hihocoder 1097 最小生成树一·Prim算法
#1097 : 最小生成树一·Prim算法 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 最近,小Hi很喜欢玩的一款游戏模拟城市开放出了新Mod,在这个Mod中,玩家可 ...
- Hihocoder 之 #1097 : 最小生成树一·Prim算法 (用vector二维 模拟邻接表,进行prim()生成树算法, *【模板】)
#1097 : 最小生成树一·Prim算法 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 最近,小Hi很喜欢玩的一款游戏模拟城市开放出了新Mod,在这个Mod中,玩家可 ...
随机推荐
- DNS记录
转载于:https://www.cnblogs.com/sddai/p/5703394.html 类型 SOA NS A AAAA PTR CNAME MX --------------------- ...
- 【JAVA】Maven profiles控制多环境数据源日志打包(转载)
https://blog.csdn.net/qq_17213067/article/details/81661295
- 4.华为路由交换技术_IP路由选择原理(上)
初始化时,路由表上只有直连路由 查看路由表 严格来讲任何一个具有三层路由功能的设备都有路由表 数据通信往往是双向的的,来回都要考虑. 路由是逐跳的,每一跳都要设置. 实际路由是根据已经分配的网络段进行 ...
- pyqt5--QTDesigner--安装与配置
安装: 安装PyQt5-tools 文件--->设置---> ---> 安装之后在 安装目录\Lib\site-packages\pyqt5_tools 找到 designer.e ...
- Mac SIP系统完整性保护如何关闭
方法/步骤1: 打开Mac终端输入命令:csrutil status 它会显示关闭的话是disable,开启的话是enabled.默认情况下是开启的所以要关闭. 方法/步骤2: 点击桌面的apple ...
- mysql参数sql_log_bin配置
mysql参数sql_log_bin配置 如果想在主库上执行一些操作,但不复制到slave库上,可以通过修改参数sql_log_bin来实现.比如说,这里模拟主从同步复制异常. 还有一种场景,就是导入 ...
- 【ZJOI2009】狼和羊的故事
题目 "狼爱上羊啊爱的疯狂,谁让他们真爱了一场:狼爱上羊啊并不荒唐,他们说有爱就有方向......" Orez听到这首歌,心想:狼和羊如此和谐,为什么不尝试羊狼合养呢?说干就干! ...
- 结合webpack实现children子路由,抽离路由模块
demo结构 package.json.webpack.config.js.index.html与上一篇博客相同. main.js // 这是项目的入口js文件 // import $ from 'j ...
- jquery even选择器 语法
jquery even选择器 语法 作用::even 选择器选取每个带有偶数 index 值的元素(比如 2.4.6).index 值从 0 开始,所有第一个元素是偶数 (0).最常见的用法:与其他元 ...
- Sublime Text 3 程序运行后中文显示乱码的解决方案
问题描述: 问题分析: 新建python文件,输入下面代码,测试发现发送给python解释器时,默认为cp936的编码方式,而py文件为UTF-8的编码方式,cp936和UTF-8的编码方式对于英文字 ...