Prim算法:最小生成树
#define _CRT_SECURE_NO_WARNINGS
/*
7 10
0 1 5
0 2 2
1 2 4
1 3 2
2 3 6
2 4 10
3 5 1
4 5 3
4 6 5
5 6 9
*/
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std; const int maxn = + ;
const int INF = ;
int cost[maxn][maxn]; //cost[u][v]表示边e=(u,v)的权值(不存在时候设为INF)
int mincost[maxn]; //从集合X出发的边到每个顶点的最小权值
bool used[maxn]; //顶点i是否包含在集合X中
int V, E; //顶点数
void init();
void input();
int prim(); int prim()
{
for (int i = ; i < V; ++i) {
mincost[i] = INF;
used[i] = false;
}
mincost[] = ;
int res = ; while (true) {
int v = -;
//从不属于X的顶点中选取从X到其权值最小的顶点
for (int u = ; u < V; u++) {
if (!used[u] && (v == - || mincost[u] < mincost[v]))
v = u;
} if (v == -) break;
used[v] = true; //把顶点v加入到X
res += mincost[v]; //把长度加到结果里 for (int u = ; u < V; u++) {
//下一次到新节点u最短 = min(已知中最短(或者还未知),尚未探索的最短).
mincost[u] = min(mincost[u], cost[v][u]);
}
}
return res;
} void init()
{
for (int i = ; i < V; i++) {
for (int j = ; j < V; j++) {
if (i == j) {
cost[i][j] = ;
}
else {
cost[i][j] = INF;
}
} }
} void input()
{
int s, t, ct;
for (int i = ; i < E; i++) {
cin >> s >> t >> ct;
cost[s][t] = cost[t][s] = ct;
}
} int main()
{
cin >> V >> E;
init();
input();
int res = prim();
cout << res << endl;
return ;
}
Prim算法:最小生成树的更多相关文章
- Prim算法---最小生成树
最小生成树的Prim算法也是贪心算法的一大经典应用.Prim算法的特点是时刻维护一棵树,算法不断加边,加的过程始终是一棵树. Prim算法过程: 一条边一条边地加, 维护一棵树. 初始 E = {}空 ...
- [讲解]prim算法<最小生成树>
最小生成树的方法一般比较常用的就是kruskal和prim算法 一个是按边从小到大加,一个是按点从小到大加,两个方法都是比较常用的,都不是很难... kruskal算法在本文里我就不讲了,本文的重点是 ...
- 6)图[2]Prim算法[最小生成树]
Prim 算法 求解方法: 首先将所指定的起点作为已选顶点,然后反复在满足如下条件下的边中选择一条最小边,直到 所有顶点已成为已选顶点为止(选择n-1条边). #include "iostr ...
- 数据结构:最小生成树--Prim算法
最小生成树:Prim算法 最小生成树 给定一无向带权图.顶点数是n,要使图连通仅仅需n-1条边.若这n-1条边的权值和最小,则称有这n个顶点和n-1条边构成了图的最小生成树(minimum-cost ...
- 最小生成树-普利姆(Prim)算法
最小生成树-普利姆(Prim)算法 最小生成树 概念:将给出的所有点连接起来(即从一个点可到任意一个点),且连接路径之和最小的图叫最小生成树.最小生成树属于一种树形结构(树形结构是一种特殊的图),或者 ...
- 数据结构代码整理(线性表,栈,队列,串,二叉树,图的建立和遍历stl,最小生成树prim算法)。。持续更新中。。。
//归并排序递归方法实现 #include <iostream> #include <cstdio> using namespace std; #define maxn 100 ...
- 最小生成树——prim算法
prim算法是选取任意一个顶点作为树的一个节点,然后贪心的选取离这棵树最近的点,直到连上所有的点并且不够成环,它的时间复杂度为o(v^2) #include<iostream>#inclu ...
- 贪心算法-最小生成树Kruskal算法和Prim算法
Kruskal算法: 不断地选择未被选中的边中权重最轻且不会形成环的一条. 简单的理解: 不停地循环,每一次都寻找两个顶点,这两个顶点不在同一个真子集里,且边上的权值最小. 把找到的这两个顶点联合起来 ...
- 无向图最小生成树(prim算法)
普里姆算法(Prim算法),图论中的一种算法,可在加权连通图里搜索最小生成树.意即由此算法搜索到的边子集所构成的树中,不但包括了连通图里的所有顶点,且其所有边的权值之和亦为最小.该算法于1930年由捷 ...
- 最小生成树Prim算法(邻接矩阵和邻接表)
最小生成树,普利姆算法. 简述算法: 先初始化一棵只有一个顶点的树,以这一顶点开始,找到它的最小权值,将这条边上的令一个顶点添加到树中 再从这棵树中的所有顶点中找到一个最小权值(而且权值的另一顶点不属 ...
随机推荐
- React 表单refs
<!DOCTYPE html><html><head lang="en"> <meta charset="UTF-8" ...
- ubuntu软件安装位置
有时候需要配置ubuntu安装的软件,一般安装软件都是使用apt-get install.那么安装完后,软件的安装目录在哪里呢,可执行文件又放在哪里呢. A.下载的软件的存放位置:/var/cache ...
- 智能制造(MES)四大阶段
智能制造的发展会经历标准化.自动化.信息化.智能化四个阶段标准化,对于生产流程.业务流程.生产制造多方面的标准化.质量检测标准化.企业管理.供应链等.标准化是组织现代化生产的重要组成部分,对于生产专业 ...
- python 字符串内置方法实例
一.字符串方法总结: 1.查找: find(rfind).index(rindex).count 2.变换: capitalize.expandtabs.swapcase.title.lower.up ...
- Java之静态代码块
有一些情况下,有些代码需要在项目启动的时候就执行,则需要使用静态代码块,这种代码是主动执行的.Java中的静态代码块是在虚拟机加载类的时候,就执行的,而且只执行一次.如果static代码块有多个,JV ...
- python之小应用:读取csv文件并处理01数据串
目的:读取csv文件内容,把0和1的数据串取出来,统计出现1的连续次数和各次数出现的频率次数 先读取csv文件内容: import csv def csv_read(file): list = [] ...
- BZOJ4377[POI2015]Kurs szybkiego czytania——数学思维题
题目描述 给定n,a,b,p,其中n,a互质.定义一个长度为n的01串c[0..n-1],其中c[i]==0当且仅当(ai+b) mod n < p.给定一个长为m的小01串,求出小串在大串中出 ...
- matplotlib极坐标方法详解
一.极坐标 在平面内取一个定点O,叫极点,引一条射线Ox,叫做极轴,再选定一个长度单位和角度的正方向(通常取逆时针方向).对于平面内任何一点M,用ρ表示线段OM的长度(有时也用r表示),θ表示从Ox到 ...
- 【HDU5831】Rikka with Parenthesis II(括号)
BUPT2017 wintertraining(16) #4 G HDU - 5831 题意 给定括号序列,问能否交换一对括号使得括号合法. 题解 注意()是No的情况. 任意时刻)不能比(超过2个以 ...
- 自学Zabbix之路15.3 Zabbix数据库表结构简单解析-Triggers表、Applications表、 Mapplings表
点击返回:自学Zabbix之路 点击返回:自学Zabbix4.0之路 点击返回:自学zabbix集锦 自学Zabbix之路15.3 Zabbix数据库表结构简单解析-Triggers表.Applica ...