Prim 算法求最小生成树
数据参考
百度经验
博客园 楠楠IT
测试接口 牛客 连通工程
问题背景
求国家建设公路的最小开销
算法思想
首先建立 邻接矩阵
然后 设定最小消耗顶点(就是两个定点之间的权重最小)顶点集合 U
每次从 矩阵中找出没有被访问过的点到已经在集合U中的点的距离的最小值,然后把这个顶点放入集合U中。
有任何问题请联系 1049188593@qq.com
#include <iostream>
#include <deque>
#include <fstream>
#include <vector>
using namespace std;
#ifdef debug
ifstream ifile("case2.txt");
#define cin ifile
#endif
#define Inf 10000000
int arc[101][101];// 连接矩阵
vector<bool> visited;// 标记是否访问过
int Prim(int vexnum, vector<int> &u)// 集合U
{
long long sumMoney = 0;
u.resize(1);
u[0] = 0; // 表示从 0 出发遍历整幅图
visited[0] = true;// 表示访问过
while (u.size() != vexnum)
{
int min = Inf;// 找出值最小的边
int nextAddPoint = -1;// 最小值所对应没有访问到的节点
for (int i = 0; i < u.size(); i++)
{
for (int j = 0; j < vexnum; j++)
{
if (!visited[j] && arc[u[i]][j] < min)
{
min = arc[u[i]][j];
nextAddPoint = j;
}
}
}
visited[nextAddPoint] = true;
u.push_back(nextAddPoint);
sumMoney += min;
}
return sumMoney;
}
int main()
{
int vexnum, edge, money;
cin >> money >> edge >> vexnum;
int x, y, value;
visited.resize(vexnum);
for (int i = 0; i < vexnum; i++)// 初始化邻接矩阵
{
for (int j = 0; j < vexnum; j++)
{
arc[i][j] = Inf;
}
visited[i] = false;// 所有的节点标记为没有访问过
}
for (int i = 0; i < edge; i++)// 邻接矩阵赋值
{
cin >> x >> y >> value;
x--; y--;
if (value > arc[x][y])
continue;
arc[x][y] = value;
arc[y][x] = arc[x][y];
}
vector<int> u;
long long rlt = Prim(vexnum, u);
if (rlt > money)
{
cout << "No" <<endl;
}
else
{
cout << "Yes" <<endl;
}
system("pause");
return 0;
}
Prim 算法求最小生成树的更多相关文章
- HDU-1233 还是畅通工程 (prim 算法求最小生成树)
prim 算法求最小生成树 还是畅通工程 Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Oth ...
- Kruskal和Prim算法求最小生成树
Kruskal算法求最小生成树 测试数据: 5 6 0 1 5 0 2 3 1 2 4 2 4 2 2 3 1 1 4 1 输出: 2 3 1 1 4 1 2 4 2 0 2 3 思路:在保证不产生回 ...
- 858. Prim算法求最小生成树(模板)
给定一个n个点m条边的无向图,图中可能存在重边和自环,边权可能为负数. 求最小生成树的树边权重之和,如果最小生成树不存在则输出impossible. 给定一张边带权的无向图G=(V, E),其中V表示 ...
- Prim算法求最小生成树
首先在介绍这个算法之前我们要之明确一下什么是最小生成树的概念: 由 V 中的全部 n 个顶点和 E 中 n−1 条边构成的无向连通子图被称为 G 的一棵生成树,其中边的权值之和最小的生成树被称为无向图 ...
- 图的普里姆(Prim)算法求最小生成树
关于图的最小生成树算法------普里姆算法 首先我们先初始化一张图: 设置两个数据结构来分别代表我们需要存储的数据: lowcost[i]:表示以i为终点的边的最小权值,当lowcost[i]=0说 ...
- AcWing 858. Prim算法求最小生成树 稀疏图
//稀疏图 #include <cstring> #include <iostream> #include <algorithm> using namespace ...
- 图的建立(邻接矩阵)+深度优先遍历+广度优先遍历+Prim算法构造最小生成树(Java语言描述)
主要参考资料:数据结构(C语言版)严蔚敏 ,http://blog.chinaunix.net/uid-25324849-id-2182922.html 代码测试通过. package 图的建 ...
- 利用Kruskal算法求最小生成树解决聪明的猴子问题 -- 数据结构
题目:聪明的猴子 链接:https://ac.nowcoder.com/acm/problem/19964 在一个热带雨林中生存着一群猴子,它们以树上的果子为生.昨天下了一场大雨,现在雨过天晴,但整个 ...
- Prim算法和Kruskal算法求最小生成树
Prim算法 连通分量是指图的一个子图,子图中任意两个顶点之间都是可达的.最小生成树是连通图的一个连通分量,且所有边的权值和最小. 最小生成树中,一个顶点最多与两个顶点邻接:若连通图有n个顶点,则最小 ...
- prime算法求最小生成树(畅通工程再续)
连着做了四道畅通工程的题,其实都是一个套路,转化为可以求最小生成树的形式求最小生成树即可 这道题需要注意: 1:因为满足路的长度在10到1000之间才能建路,所以不满足条件的路径长度可以初始化为无穷 ...
随机推荐
- Asp.net mvc基础(九)使用DropDownList下拉列表
第一种下拉列表写法: 后端 前端 第二种下拉列表写法: 使用Html辅助方法@Html.DropDownList("名称","List<SelectListItem ...
- 大模型流式调用规范(SSE)
随着大语言模型的广泛应用,如何高效地与其进行接口调用成为一个关键问题.传统的请求-响应模式在面对大模型生成大量文本时存在响应延迟高.用户体验差等问题.流式输出(Streaming)是解决该问题的重要手 ...
- 大模型向量数据库去重的N种实现方案!
简单来说,"向量"Vector 是大模型(LLM)在搜索时使用的一种"技术手段",通过向量比对,大模型能找出问题的相关答案,并且进行智能回答. 向量简介 Vec ...
- nexus私有仓库与maven集成
首先搭建maven 下载maven,并解压,移动到/usr/local/,重命名为 maven-3.5.4 配置环境变量:vim /etc/profileexport MAVEN_HOME=/usr/ ...
- 数据结构之位图(bitmap、RoaringMap)
参照资料: 1.https://www.bilibili.com/video/BV1u44y1g7Ps(bitmap) 2.https://b23.tv/cQtuFOx (RoaringMap) 3. ...
- WPF初学者的一点迷思
1.WPF只是前端!前端!前端!看了两天的视频,跟着敲了三个项目,自己写了一个小demo之后,从gitee上下了一个别的的框架之后才整明白,WPF只是前端.或者说只是把原本winfrom的界面+事件+ ...
- 操作系统综合题之“按要求是个进程协调完成任务,补充完整下列程序,将编号①~⑩处空缺的内容填写(Buffer缓冲区问题-代码补充)”
1.问题:假设某系统有四个进程.input1和input2进程负责从不同设备读取数据,分别表示为data1和data2,存放在缓冲区Buffer中,output1和output2进程负责从Buffer ...
- 关于HarmonyOS NEXT中的模块化开发
今天不写页面和动画,斗胆给大家讲一讲软件工程. 软件工程讲究高内聚低耦合,意思就是把整个工程按照分工不同分成不同的模块,每一个模块紧密联系又互不影响.就像一座摩天大楼,它里面的电路网非常庞大和复杂,它 ...
- Vue最新面试攻略
@charset "UTF-8"; .markdown-body { line-height: 1.75; font-weight: 400; font-size: 15px; o ...
- RPC实战与核心原理之时钟轮
时钟轮在RPC中的应用 回顾 在分布式环境下,RPC 框架自身以及服务提供方的业务逻辑实现,都应该对异常进行合理地封装,让使用方可以根据异常快速地定位问题:而在依赖关系复杂且涉及多个部门合作的分布式系 ...