1348:【例4-9】城市公交网建设问题

【解题思路】

该题难点是要保存最小生成树的所有边,对于不同的求最小生成树的算法,有不同的方法来完成。

【参考代码】

prim算法

#include<bits/stdc++.h>
using namespace std;
const int N = 105; // 定义常量 N,表示数组大小
int n, e, x, y, w;
int g[N][N]; // 保存图的邻接矩阵
int ans[N]; // 记录当前最小生成树中每个点的父亲节点编号
bool v[N];   // 标记哪些点已经在MST中
struct nod {int to, w;bool operator < (const nod &b) const { // 重载小于号运算符,使得该结构体对象可被优先队列使用(小根堆)return w > b.w;  // 按权值从小到大排序}
}; 
void prim() {priority_queue<nod> pq;pq.push({1, 0}); // 将结点 1 加入最小生成树中,其父亲节点为 0while (!pq.empty()) {nod t = pq.top();pq.pop();if (v[t.to]) continue; // 如果已经在最小生成树中,则忽略v[t.to] = true; // 标记该结点已加入MSTif (t.w != 0) { // 输出点与其父亲节点之间的边cout << ans[t.to] << " " << t.to << endl;}for (int i = 1; i <= n; i++) { // 枚举所有未访问过的结点if (!v[i] && g[t.to][i] < 0x3f3f3f3f) { // 如果可从 t.to 到达i,并且 i 未被访问过pq.push({i, g[t.to][i]}); // 将 i 加入优先队列if (g[t.to][i] < g[ans[i]][i]) ans[i] = t.to; // 更新当前最短距离}}}
}int main() {cin >> n >> e;memset(g, 0x3f, sizeof g); // 初始化邻接矩阵为正无穷for (int i = 1; i <= e; i++) {cin >> x >> y >> w;g[x][y] = g[y][x] = w; // 读入边信息,建立双向边}for (int i = 1; i <= n; i++) ans[i] = i; // 最开始每个点的父亲节点都是自己prim(); // 运行 Prim 算法求解最小生成树return 0;
}
Kruskal算法
#include <iostream>  
#include <algorithm>  
#include <vector>  
using namespace std;  
const int MAX_N = 100;  
const int MAX_M = 10000;    
int n, m;struct Edge {  int u, v;  int len;  
};  vector<Edge> MST; // 用于存储最小生成树的边  
Edge E[MAX_M]; // 存储所有边的数组  
int fa[MAX_N]; // 并查集的父节点数组 bool cmp(Edge a, Edge b) {  // 按边长从小到大排序 return a.len < b.len;  
}  void init() {  for (int i = 1; i <= n; i++) {  fa[i] = i;  }  
} int find(int x) { // 路径压缩 while (fa[x] != x) x = fa[x];return x;
} void unionn(int x, int y) {  // 合并集合 fa[y] = x;      
} int kruskal() {  int sum = 0; // 最小生成树的权值和  init(); // 初始化并查集  sort(E, E + m, cmp); // 对边进行排序  for (int i = 0; i < m; i++) {  int u = find(E[i].u);  int v = find(E[i].v);   if (u != v) { // 如果u和v不在同一个集合中  unionn(u,v); // 合并集合  MST.push_back({E[i].u, E[i].v, E[i].len}); // 将边加入到最小生成树中  sum += E[i].len; // 更新权值和  }  }  return sum; // 返回最小生成树的权值和  
}  int main() {  cin >> n >> m; // 输入顶点数和边数  for (int i = 0; i < m; i++) { // 输入每条边的信息  cin >> E[i].u >> E[i].v >> E[i].len; // 输入起点、终点和长度,并存储到边数组中  }  int totalCost = kruskal(); // 调用Kruskal算法计算最小生成树的权值和    for (int i=0;i<n-1;i++) { // 遍历最小生成树中的边  cout << MST[i].u << " " << MST[i].v << endl; // 输出边的信息  }  return 0; // 程序结束返回0  
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/849447.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Vue3 时间格式化

1、基础使用 https://juejin.cn/post/6933548549321785352 2、template里面直接使用 $dayjs(info.patientBirthday).format("YYYY-MM-DD") 3、script里面使用 import { ref, reactive, getCurrentInstance } from "vue"; const { proxy } getCurren…

python的rolling_mean()函数

5.1 rolling_mean函数解释 pandas.rolling_mean(arg, window, min_periodsNone, freqNone, centerFalse, howNone, **kwargs)rolling_mean函数表示通过移动窗口求平均值&#xff0c;即用当前值和前[window]个数值取平均数&#xff0c;得到新的数值。 import pandas as pddata…

C语言详解(动态内存管理)1

Hi~&#xff01;这里是奋斗的小羊&#xff0c;很荣幸您能阅读我的文章&#xff0c;诚请评论指点&#xff0c;欢迎欢迎 ~~ &#x1f4a5;&#x1f4a5;个人主页&#xff1a;奋斗的小羊 &#x1f4a5;&#x1f4a5;所属专栏&#xff1a;C语言 &#x1f680;本系列文章为个人学习…

Django 传递额外参数给视图函数

本书1-7章样章及配套资源下载链接: https://pan.baidu.com/s/1OGmhHxEMf2ZdozkUnDkAkA?pwdnanc 源码、PPT课件、教学视频等&#xff0c;可以从前言给出的下载信息下载&#xff0c;大家可以评估一下。 在Django框架中&#xff0c;URLconf模块还支持一种传递额外参数给视图函…

2024-06-07 Unity 编辑器开发之编辑器拓展8 —— Scene 窗口拓展

文章目录 1 Handles 类1.1 Scene 响应函数1.2 自定义窗口中监听 Scene1.3 Handles 常用 API2.2.1 颜色控制2.2.2 文本2.2.3 线段2.2.4 虚线2.2.5 圆弧2.2.6 圆2.2.7 立方体2.2.8 几何体2.2.9 移动、旋转、缩放2.2.10 自由移动 / 旋转 2 Scene 窗口中显示 GUI3 HandleUtility4 G…

Python 将CSV文件转为PDF文件

CSV文件通常用于存储大量的数据&#xff0c;而PDF文件则是一种通用的文档格式&#xff0c;便于与他人共享和打印。将CSV文件转换成PDF文件可以帮助我们更好地管理和展示数据。本文将介绍如何通过Python编程将CSV文件导出为PDF文件。 Python Excel库安装及介绍 在 Python 中&am…

[office] 对Excel工作表中的单元格区域命名以及利用命名定位单元格的方法 #知识分享#学习方法

对Excel工作表中的单元格区域命名以及利用命名定位单元格的方法 为了能方便地找到特定数据所在的单元格&#xff0c;同时也为了在编辑表格时能够方便地实现单元格的引用&#xff0c;以方便使用公式和函数进行计算&#xff0c;用户可以对单元格进行命名。下面介绍对Excel工作表…

GIGE 协议摘录 —— GVSP 协议(三)

系列文章目录 GIGE 学习笔记 GIGE 协议摘录 —— 设备发现&#xff08;一&#xff09; GIGE 协议摘录 —— GVCP 协议&#xff08;二&#xff09; GIGE 协议摘录 —— GVSP 协议&#xff08;三&#xff09; GIGE 协议摘录 —— 引导寄存器&#xff08;四&#xff09; GIGE 协议…

华为面经整理

文章目录 实习第一面准备提问相关算法相关 第一面结果提问环节 总结 实习 第一面准备 提问相关 操作系统有哪些功能 进程管理&#xff1a; 进程调度、进程同步和通信、多任务处理 内存管理&#xff1a; 内存分配、虚拟内存技术、内存保护 文件系统管理&#xff1a; 文件存储…

golang优雅代码【lock实现】

golang优雅代码【lock实现】 1.局部锁1.1 具体实现方式 本文代码风格来源参考 database/sql 包 1.局部锁 database/sql源码中使用 withLock(dc, func(){...}) 方法实现局部锁&#xff0c;完美利用了 golang 的 defer 关键字对 入参dc 进行加锁解锁&#xff0c;感觉实现很优雅…

基础概念解析:SOCKS5代理究竟是什么?SOCKS5代理ip使用场景有哪些?

在当今数字化时代&#xff0c;网络安全和隐私保护已成为我们日常生活中不可忽视的问题。随着网络攻击手段的日益复杂&#xff0c;如何安全地访问互联网资源成为了一个亟待解决的问题。SOCKS5代理作为一种先进的网络协议&#xff0c;为我们提供了解决这一问题的有效方案。 本文…

活动预热丨在 AGI Playground 2024 遇见一群 RTE+AI 的 Builders

6 月 22、23 日&#xff0c;北京。 AGI Playground 2024&#xff0c;这个夏日最火热的 AGI 盛会。 王小川、杨植麟等 AGI 创业者悉数参加。 RTE 开发者社区的 builders 和 RTE Open Day 也将在现场&#xff01; 我们将为大家呈现两大板块&#xff1a; 01 实时开发挑战 Wor…

OpenCV-最小外接圆cv::minEnclosingCircle

作者&#xff1a;翟天保Steven 版权声明&#xff1a;著作权归作者所有&#xff0c;商业转载请联系作者获得授权&#xff0c;非商业转载请注明出处 函数原型 void minEnclosingCircle(InputArray points, Point2f& center, float& radius); 参数说明 InputArray类型的…

input只允许输入数字

input只允许输入数字 <input id"phone" type"text" placeholder"输入手机号" maxlength"11" oninput"valuevalue.replace(/[^\d]/g,);if(value.length>11) valuevalue.slice(0,11)"/>input只允许输入字母和数字 …

从openstack环境中将服务器镜像导出的简单办法

1 登录openstack的页面&#xff0c;找到计划导出的主机信息。 通过实例名称&#xff0c; IP地址&#xff0c;找到对应的记录。点击实例名称&#xff0c;进入详情页。 在这里主要可以知道&#xff0c;当前主机在服务器上的文件ID&#xff0c;可以按这个ID去找对应的目录。 还可…

Nvidia Jetson/Orin/算能 +FPGA+AI大算力边缘计算盒子:无人机自主飞行软件平台

案例简介 所主导开发的 Generalized Autonomy Aviation System (GAAS) 是为无人机以及城市空中交通 (UAM, Urban Air Mobility) 所设计的开源无人机自主飞行框架。通过 SLAM、路径规划和 Global Optimization Graph 等功能为无人机提供在无 GPS 与外部通信情况下的自主飞行功…

Podman:Linux下的无守护进程容器引擎

Podman:Linux下的无守护进程容器引擎 一、背景 在容器化技术日益盛行的今天,Docker 无疑是其中的佼佼者。然而,今天我们要介绍的 Podman,同样是一款强大的容器引擎,它不仅与 Docker 有着高度的兼容性,更在安全性与易用性上有着独特的优势。 Podman 是一款基于 Linux 操作…

【经典设计】构建业务架构的3大视图

在软件设计过程中&#xff0c;架构设计、功能设计和数据设计是三个不同层次的设计工作。而业务架构是系统整体规划中重要的基础工作&#xff0c;通常用业务架构图来表达业务架构。 业务架构定义了企业的治理结构、业务能力、业务流程、业务数据。业务能力说明企业做什么&#x…

想不到,AI爆发的趋势下,我会这么快被AI替代...

大家好&#xff0c;我是向阳 AI横空出世后&#xff0c;不少行业受到了冲击。第一批因AI失业的人&#xff0c;也已经出现了&#xff01; 他们是游戏设计师、原画设计师、服装设计师……社交媒体上&#xff0c;不断能看到这样的新闻&#xff1a;引入AI后&#xff0c;某游戏公司…

<microros> 如何自定义uROS2数据类型

如何自定义数据类型 在microros中&#xff0c;我们可以看到&#xff0c;官方给我们提供了很多数据类型。 如果我们在实际使用的时候&#xff0c;这些类型无法满足我们的传输要求怎么办呢&#xff1f; 官方也提供了自定义数据类型的办法。 参考&#xff1a; https://github…