【算法与数据结构】图的最小生成树 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中,玩家可 ...
随机推荐
- @ResponseBody 注解是什么意思?
1. @ResponseBody注解的作用是将Controller的方法返回的对象通过适当的转换器转换为指定的格式之后,写入到response对象的body区,通常用来返回JSON数据或者是XML数据 ...
- win32创建工具栏的自定义图标
注意点:使用LoadImage函数加载bmp图片,这里特指BMP图片,其实LoadImage可以加载很多格式的图片 HBITMAP bitmap = (HBITMAP)LoadImage((HINST ...
- Taro 压缩图片api
Taro API里面没有写支持compressImage,ts提示也是,开发者工具提示暂时不支持此API调试,请使用真机进行开发.这是因为Taro这个库没有把新的api加上,其实还是调用了wx.com ...
- Python之网路编程之进程池及回调函数
一.数据共享 1.进程间的通信应该尽量避免共享数据的方式 2.进程间的数据是独立的,可以借助队列或管道实现通信,二者都是基于消息传递的. 虽然进程间数据独立,但可以用过Manager实现数据共享,事实 ...
- vue history模式下的微信分享
// 微信验证 export function requireConfig() { let url = window.location.href systemApi.wxoption({ url: u ...
- python主流框架简介和Django框架的使用
目录 一.手撸简易web框架 二.动静态网页 1. 静态网页 2. 动态网页 三.jinja2模板语法 1. jinja2的作用 四.python主流web框架 1. django 3. tornad ...
- hive中对子查询如in,exists等支持
案例情况:同事使用公司数据探查跑一段代码,部分代码如下,报错,显示不支持in内的子查询.但是直接用虚拟机去跑的话代码没有任何报错,也出结果,很奇怪. SELECT t1.SIGN_CODE AS bu ...
- HDU-3416-MarriageMatch4(最大流,最短路)
链接: https://vjudge.net/problem/HDU-3416 题意: Do not sincere non-interference. Like that show, now sta ...
- PIXI兼容微信小游戏
首先导入官方的weapp-adapter,然后导入pixi.min.js,微信小程序使用ES6的module引用模块,具体参见ES6的Module. import './libs/weapp-adap ...
- Python机器学习常用库记录
1.argparse http://www.jianshu.com/p/fef2d215b91d 命令行解释工具 2.tflearn http://tflearn.org/doc_index/ ten ...