C++U7-07-图的遍历进阶

news/2025/3/19 21:59:52/文章来源:https://www.cnblogs.com/jayxuan/p/18231674

学习目标

 引例

 深搜遍历

 

 

 

 

 

[【图的遍历进阶】有向图中的可达]

【算法分析】
从 a 点广搜,并用 vis 数组标记从 a 能够到达的点,如果 vis 
b
​=true,则表示能够到达,否则反之。【参考代码】
#include<bits/stdc++.h>
using namespace std;
const int maxn = 2e5 + 9;
vector<int> ve[maxn];
bool vis[maxn];
int main() {int n, m, a, b;cin >> n >> m >> a >> b;for (int i = 0; i < m; i++) {int u, v;cin >> u >> v;ve[u].push_back(v);}queue<int> q;q.push(a);vis[a] = 1;while (q.size()) {int r = q.front();q.pop();for (int i = 0; i < ve[r].size(); i++) {int y = ve[r][i];if (!vis[y]) {vis[y] = 1;q.push(y);}}}if (vis[b]) cout << "Yes";else cout << "No";return 0;
}
View Code

 

 

 

广搜遍历

 

 

 

[【图的遍历进阶】朋友圈的数量]

 

【算法分析】
其实就是求图中连通块的数量,可以使用广搜或者深搜。每次从没有访问过的点开始搜索,将能够到达的点全部标记。【参考代码】
#include<bits/stdc++.h>
using namespace std;
const int maxn = 2e5 + 9;
vector<int> ve[maxn];
bool vis[maxn];
void dfs(int x) {vis[x] = 1;for (int i = 0; i < ve[x].size(); i++) {int y = ve[x][i];if (vis[y]) continue;dfs(y);}
}
int main() {int n, m;cin >> n >> m;for (int i = 0; i < m; i++) {int u, v;cin >> u >> v;ve[u].push_back(v);ve[v].push_back(u);}int ans = 0;for (int i = 1; i <= n; i++) {if (!vis[i]) {dfs(i);ans++;}}cout << ans;return 0;
}
View Code

 

[【图的遍历进阶】图的遍历]

 

【算法分析】
如果从每个点开始搜索去找到编号最大的点,这样做会超时。如果一些点组成的集合 S ,能够到达最大的编号的点是相同的,那么如果建反边,那么从这个编号最大点必定能够到达集合 S 的所有点。因此可以从大到小枚举点的编号 i,当一个点没有被访问过,就从该点开始搜索所有它能到达的点,那么这些点能够到达的最大编号一定是 i。【参考代码】
#include<bits/stdc++.h>
using namespace std;
const int maxn = 1e5 + 9;
vector<int> ve[maxn];
int ans[maxn], vis[maxn];
void dfs(int x, int ma) {vis[x] = 1;ans[x] = ma;for (int i = 0; i < ve[x].size(); i++) {int y = ve[x][i];if (vis[y]) continue;dfs(y, ma);}
}
int main() {int n, m;cin >> n >> m;for (int i = 0; i < m; i++) {int u, v;cin >> u >> v;ve[v].push_back(u);}for (int i = n; i >= 1; i--) {if (!vis[i]) dfs(i, i);}for (int i = 1; i <= n; i++) {cout << ans[i] << " ";}return 0;
}
View Code

 

 

本节课作业讲解分析

链接:https://pan.baidu.com/s/1TjhdjO84yjwQ5-UNvrrThw?pwd=0000
提取码:0000

 

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

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

相关文章

第2次总结性Blog-题目集4~6

目录前言 设计与分析 采坑心得 改进建议 总结关于java&面向对象在经过这几个月的系统性的java学习中,我始终牢记着一句话:面对对象程序设计最重要的是设计,而不是代码。设计即要遵守单一职责原则,简单来说就是什么该做,什么不该做。设计的越好,复用性就越高,需要修改…

一款WPF的精简版MVVM框架——stylet框架的初体验(包括MVVM绑定、依赖注入等操作)

今天偶然知道一款叫做stylet的MVVM框架,挺小巧的,特别是它的命令触发方式,简单粗暴,让人感觉很巴适,现在我做一个简单的demo来顺便来分享给大家。 本地创建一个WPF项目,此处我使用.NET 8来创建。然后引用stylet最新的nuget包。 然后删掉App.xaml里面自带的启动项删掉以后…

按键中断驱动程序-poll机制

前言:学东西的时候总是喜欢碎碎念,去思考该怎么学。关于嵌入式开发,以前就觉得嵌入式只是一个工具,关键还是结合专业知识赋能,比如控制、信号处理、神经网络、计算机网络、各种协议比如蓝牙、wifi,音视频,当然,如果能够把内核学的很透彻,那也是很了不起的。现在越学越…

UDP协议的应用——域名解析

设计程序实现解析www.baidu.com 的域名,把获取到的百度的IP地址全部输出到终端并验证是否正确设计程序实现解析www.baidu.com 的域名,把获取到的百度的IP地址全部输出到终端并验证是否正确 /******************************************************************************…

基于腾讯元器搭建前端小助手

通过本文,我们了解了如何利用腾讯元器搭建一个前端助手智能体。通过使用插件和观察其使用效果,我们可以发现前端助手在解决问题和提供帮助方面的潜力。这个前端助手可以成为我们在前端开发过程中的得力助手,帮助我们提高工作效率和解决难题。随着智能技术的不断进步,我们可…

根据域名获取IP

/**************************************************************************************************************************************** file name:multicast.c* author :momolyl@126.com* date :2024/06/04* brief :设计程序实现解析www.baidu.co…

npm下载依赖报错:operation not permitted

npm下载依赖报错:operation not permitted 想下个SoybeanAdmin来用下,需要用到pnpm,但是用npm下载的时候直接报错简单来说就是权限的问题,网上很多都说改nodejs下面的几个文件夹的权限,我的评价是不好使,还得修改nodejs这个文件夹的权限才行,右键属性-安全-编辑-勾上完全…

containerd 源码分析:创建 container(三)

文接 containerd 源码分析:创建 container(二) 1.2.2.2 启动 task 上节介绍了创建 task,task 创建之后将返回 response 给 ctr。接着,ctr 调用 task.Start 启动容器。 // containerd/client/task.go func (t *task) Start(ctx context.Context) error {r, err := t.client…

linux下用域名解析ip地址列表

linux下用域名解析ip地址列表 目录linux下用域名解析ip地址列表头文件/宏定义主函数验证结果 头文件/宏定义 #include <stdio.h> #include <stdlib.h> #include <netdb.h> #include <arpa/inet.h>主函数 /*******************************************…

模拟集成电路设计系列博客——6.3.3 动态匹配电流源

6.3.3 动态匹配电流源 在电流开关上使用动态技术是为了实现用于音频D/A转换器的高度良好匹配的电流源(大到16bit精度)[Schouwenaars,1988]。 这个方式被用于设计一个16-bit的音频D/A转换器,其中6位MSB通过温度计码实现。由于进度要求被限制在剩余位上,一个二进制阵列在他们…

Redis 结合 Docker 搭建集群,并整合SpringBoot

软件版本 Redis 7.2.5 Docker 26.1.3准备工作 由于docker直接拉取运行了,所以需要提前准备配置文件 Index of /releases/ (redis.io) 下载后,把redis-7.2.5.tar.gz\redis-7.2.5.tar\redis-7.2.5\里的 redis.conf sentinel.conf 复制出来概览结构如上图所示,准备6个服务器。配…