图的最小生成树prim算法模板
用prim算法构建最小生成树适合顶点数据较少而边较多的图(稠密图)
prim算法生成连通图的最小生成树模板伪代码:
G为图,一般为全局变量,数组d为顶点与集合s的最短距离
Prim(G, d[]){
初始化;
for (循环n次){
u = 使d[u]最小的还未访问的顶点的标号;
记u 已被访问;
for(从u出发到达的所有顶点v){
if (v未被访问&&以u为中介点使得v与集合S的嘴短距离d[v]更优){
将G[u][v]赋值给v与结合S的最短距离d[v];
}
} }
}
邻接矩阵版:
//邻接矩阵版
const int MAXV = ; //最大顶点数
const int INF = ; //设INF为一个很大的数 int n,m, G[MAXV][MAXV]; //n为顶点数,G为图
int d[MAXV]; //顶点与集合S的最短距离
bool vis[MAXV] = { false }; //默认0号为初始点,函数返回最小生成树的边权之和
int prim(){
//初始化
fill(d, d + MAXV, INF);
d[] = ;
int ans = ; //存放最小生成树的边权之和
//遍历所有的顶点,每次遍历访问一个顶点
for (int i = ; i < n; i++){
//找出当前还未访问但是距离集合S最近的顶点
int u = -, MIN = INF;
for (int j = ; j < n; j++){
if (vis[j] == false && d[j] < MIN){
u = j;
MIN = d[j];
}
} //如果找不到这样的顶点
if (u == -) return -; //标记这个顶点为已访问
vis[u] = true;
ans += d[u]; //遍历这个顶点的邻接点,如果没有访问且距离集合S更近,更新d[u]
for (int j = ; j < n; j++){
if (vis[j] == false && G[u][j] != INF && G[u][j] < d[j]){
d[j] = G[u][j];
}
}
} return ans;
}
邻接表模板:
const int MAXV = ;
const int INF = ; struct Node{
int v, dis; //v为边的目标顶点,dis为权
}; vector<Node> Adj[MAXV];
int n, m;
int d[MAXV];
bool vis[MAXV] = { false }; int prim(){
fill(d, d + MAXV, INF);
d[] = ;
int ans = ; for (int i = ; i < n; i++){
int u = -, MIN = INF;
for (int j = ; j < n; j++){
if (vis[j] == false && d[j] < MIN){
u = j;
MIN = d[j];
}
} if (u == -) return -;
vis[u] = true;
ans += d[u];
for (int j = ; j < Adj[u].size(); j++){
int v = Adj[u][j].v;
if (vis[v] == false && Adj[u][j].dis < d[v]){
d[v] = Adj[u][j].dis;
}
}
}
return ans;
}
图的最小生成树prim算法模板的更多相关文章
- 图的最小生成树——Prim算法
Prim算法 Prim算法求最小生成树是采取蓝白点的思想,白点代表已经加入最小生成树的点,蓝点表示未加入最小生成树的点. 进行n次循环,每次循环把一个蓝点变为白点,该蓝点应该是与白点相连的最小边权的是 ...
- Poj1258 Agri-Net (最小生成树 Prim算法 模板题)
题目链接:http://poj.org/problem?id=1258 Description Farmer John has been elected mayor of his town! One ...
- 最小生成树-prim算法模板
题目描述 如题,给出一个无向图,求出最小生成树,如果该图不连通,则输出orz 输入输出格式 输入格式: 第一行包含两个整数N.M,表示该图共有N个结点和M条无向边.(N<=5000,M<= ...
- 最小生成树prim算法———模板
codevs.cn 最优布线问题 #include<cstdio>#include<cstring> bool u[101]; int g[101][101],minn[101 ...
- 数据结构代码整理(线性表,栈,队列,串,二叉树,图的建立和遍历stl,最小生成树prim算法)。。持续更新中。。。
//归并排序递归方法实现 #include <iostream> #include <cstdio> using namespace std; #define maxn 100 ...
- 最小生成树Prim算法(邻接矩阵和邻接表)
最小生成树,普利姆算法. 简述算法: 先初始化一棵只有一个顶点的树,以这一顶点开始,找到它的最小权值,将这条边上的令一个顶点添加到树中 再从这棵树中的所有顶点中找到一个最小权值(而且权值的另一顶点不属 ...
- Highways POJ-1751 最小生成树 Prim算法
Highways POJ-1751 最小生成树 Prim算法 题意 有一个N个城市M条路的无向图,给你N个城市的坐标,然后现在该无向图已经有M条边了,问你还需要添加总长为多少的边能使得该无向图连通.输 ...
- SWUST OJ 1075 求最小生成树(Prim算法)
求最小生成树(Prim算法) 我对提示代码做了简要分析,提示代码大致写了以下几个内容 给了几个基础的工具,邻接表记录图的一个的结构体,记录Prim算法中最近的边的结构体,记录目标边的结构体(始末点,值 ...
- 图论算法(五)最小生成树Prim算法
最小生成树\(Prim\)算法 我们通常求最小生成树有两种常见的算法--\(Prim\)和\(Kruskal\)算法,今天先总结最小生成树概念和比较简单的\(Prim\)算法 Part 1:最小生成树 ...
随机推荐
- 开学第一课Java考试
package moguiba;import java.text.DecimalFormat;import java.util.Scanner;import moguiba.ScoreInformat ...
- mybatis插入嵌套对象
今晚做项目遇上了一个需求,需要插入嵌套对象. 对象结构是这样的: public class RegisterMsg{ private Header header; private short pro ...
- IDEA科学使用
今天莫名激活码又用不起了有能力的支持正版吧 ,要用的时候又去网上到处找然后发现各种用不了,去淘宝又怕被骗博主就是过来人 ,总算下定决心写一篇一劳永逸的方法.. 方法一:合理使用激活码 用过idea的都 ...
- VMware安装CentOS系统与配置全过程
1.需要哪些安装包 VMware Workstation 15 Pro CentOS-7-x86_64-DVD-1810 hadoop-2.7.3 apache-hive-3.1.1 jdk-8u18 ...
- npm vs yarn
npm yarn npm install yarn npm install react --save yarn add react npm uninstall react --save yarn re ...
- substring && substr
let string = '0123456';string.substring(0,3);//start: number, end?: number 012(而非 0123)string.substr ...
- java实现判断两个二叉树是否相同
1.定义树节点类:节点值.左节点.右节点.构造器 2.先判断树是否为空的情况 3.树不为空时,判断节点所指的值是否相等,若相等,则递归判断节点的左右节点是否相同,相同则返回true /** * Def ...
- How to write a paper in a weekend - by Prof. Pete Carr
Key points: don't procrastinate; review the notes and renew the literature search; determine who you ...
- Appium+Python移动端(Android)自动化测试环境搭建
一.安装JDK 下载好jdk安装包后直接下一步直至安装完成即可,安装完JDK后配置环境变量 :计算机→属性→高级系统设置→高级→环境变量: 系统变量→新建 JAVA_HOME 变量 变量值填写jdk的 ...
- TAB_JG_COMMAND_SERVERINFO
简介 存储设备基本信息 表结构