用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算法模板的更多相关文章

  1. 图的最小生成树——Prim算法

    Prim算法 Prim算法求最小生成树是采取蓝白点的思想,白点代表已经加入最小生成树的点,蓝点表示未加入最小生成树的点. 进行n次循环,每次循环把一个蓝点变为白点,该蓝点应该是与白点相连的最小边权的是 ...

  2. Poj1258 Agri-Net (最小生成树 Prim算法 模板题)

    题目链接:http://poj.org/problem?id=1258 Description Farmer John has been elected mayor of his town! One ...

  3. 最小生成树-prim算法模板

    题目描述 如题,给出一个无向图,求出最小生成树,如果该图不连通,则输出orz 输入输出格式 输入格式: 第一行包含两个整数N.M,表示该图共有N个结点和M条无向边.(N<=5000,M<= ...

  4. 最小生成树prim算法———模板

    codevs.cn 最优布线问题 #include<cstdio>#include<cstring> bool u[101]; int g[101][101],minn[101 ...

  5. 数据结构代码整理(线性表,栈,队列,串,二叉树,图的建立和遍历stl,最小生成树prim算法)。。持续更新中。。。

    //归并排序递归方法实现 #include <iostream> #include <cstdio> using namespace std; #define maxn 100 ...

  6. 最小生成树Prim算法(邻接矩阵和邻接表)

    最小生成树,普利姆算法. 简述算法: 先初始化一棵只有一个顶点的树,以这一顶点开始,找到它的最小权值,将这条边上的令一个顶点添加到树中 再从这棵树中的所有顶点中找到一个最小权值(而且权值的另一顶点不属 ...

  7. Highways POJ-1751 最小生成树 Prim算法

    Highways POJ-1751 最小生成树 Prim算法 题意 有一个N个城市M条路的无向图,给你N个城市的坐标,然后现在该无向图已经有M条边了,问你还需要添加总长为多少的边能使得该无向图连通.输 ...

  8. SWUST OJ 1075 求最小生成树(Prim算法)

    求最小生成树(Prim算法) 我对提示代码做了简要分析,提示代码大致写了以下几个内容 给了几个基础的工具,邻接表记录图的一个的结构体,记录Prim算法中最近的边的结构体,记录目标边的结构体(始末点,值 ...

  9. 图论算法(五)最小生成树Prim算法

    最小生成树\(Prim\)算法 我们通常求最小生成树有两种常见的算法--\(Prim\)和\(Kruskal\)算法,今天先总结最小生成树概念和比较简单的\(Prim\)算法 Part 1:最小生成树 ...

随机推荐

  1. linux命令su,sudo 使用和区别

    1- sudo 与 su 两个命令的最大区别是: sudo 命令需要输入当前用户的密码,su 命令需要输入 root 用户的密码.另外一个区别是其默认行为.sudo 命令只允许使用提升的权限运行单个命 ...

  2. 剑指offer-面试题18-删除链表中重复的节点-链表

    /* 题目: 删除链表中重复的节点 */ /* 思路: 1.声明一个头节点head,即使首元节点被删除,也可返回head->next 2.声明两个指针, 一个指针qNode指向确定不会删除的链表 ...

  3. Nessus 8.2.3无IP限制VM版虚拟机

    根据“西门吹雪”http://ximcx.cn/m/?post=151的文章自己下载配置的过程 VM版本>=12都行,我用的是VM14 下载地址 https://moehu-my.sharepo ...

  4. 咸鱼的ACM之路:动态规划(DP)学习记录

    按挑战程序设计竞赛介绍的顺序记录一遍学习DP的过程. 1. 01背包问题 问题如下: 有N个物品,每个物品(N[i])都有一定的体积(W[i]),和一定的价值(V[i]) 现在给定一个背包,背包的容量 ...

  5. 题解 AT4556 【12/22】

    题目传送门. ___________ 主要思路 我们可以使用\(C++\)语言中的\(string\)字符串来解. 先定义一个字符串\(s\),并输入\(s\). string s; cin>& ...

  6. 深入浅出Mybatis系列四-配置详解之typeAliases别名(mybatis源码篇)

    注:本文转载自南轲梦 注:博主 Chloneda:个人博客 | 博客园 | Github | Gitee | 知乎 上篇文章<深入浅出Mybatis系列(三)---配置详解之properties ...

  7. Bootstrap资料

    Bootstrap手册  : https://www.jqhtml.com/bootstraps-syntaxhigh/index.html 中文文档 :https://v3.bootcss.com/ ...

  8. 通过nginx实现多个域名访问同一个服务器

    一台服务器通过nginx配置多个域名(80端口)  参考:https://www.cnblogs.com/ruanjianlaowang/p/11182486.html 1. 问题描述 多个域名对应一 ...

  9. 假期学习【六】Python网络爬虫2020.2.4

    今天通过Python网络爬虫视频复习了一下以前初学的网络爬虫,了解了网络爬虫的相关规范. 案例:京东的Robots协议 https://www.jd.com/robots.txt 说明可以爬虫的范围 ...

  10. lampp ERROR 1044 (42000): Access denied for user ''@'localhost' to database 'lepus'

    解决方法: 在[mysqlld]段下增加如下代码:skip-grant-tables: 1.which mysql 查看mysql位置,例如:/opt/lampp/bin/mysql 2.进入配置my ...