数据结构之图的遍历

news2024/9/23 23:44:42

文章目录

  • 广度优先遍历
  • 深度优先遍历

广度优先遍历

广度优先遍历过程类似于二叉树的层序遍历,从起始顶点开始一层一层向外进行遍历

在这里插入图片描述

比如现在要找东西,假设有三个抽屉,东西在那个抽屉不清楚,现在要将其找到,广度优先遍历的做法是:

  • 先将三个抽屉打开,在最外层找一遍
  • 将每个抽屉中红色的盒子打开,再找一遍
  • 将红色盒子中绿色盒子打开,再找一遍直到找完所有的盒子

在这里插入图片描述

  • 广度优先遍历需要借助一个队列和一个标记数组,利用队列先进先出的特点实现一层一层向外遍历,利用标记数组来记录各个顶点是否被访问过。
  • 刚开始时将起始顶点入队列,并将起始顶点标记为访问过,然后不断从队列中取出顶点进行访问,并判断该顶点是否有邻接顶点,如果有邻接顶点并且该邻接顶点没有被访问过,则将该邻接顶点入队列,并在入队列后立即将该邻接顶点标记为访问过。
void BFS(const V& src) //图的广度优先遍历
{
	size_t srci = _index[src];//找到值src对应在数组中的下标
	
	queue<int> q;
	vector<bool> visited(_vertex.size(), false); //用来标记哪些元素已经入过队列了
	
	q.push(srci);
	visited[srci] = true;
	while (!q.empty())
	{
		int front = q.front();
		cout << front << ": " << _vertex[front] << endl;
		q.pop();
		//把这个顶点的朋友带入队列,并更新visited数组
		for (int i = 0; i < _vertex.size(); i++)
		{
			//_matrix[front][i]代表front->i是否有边,数组值不等于MAX_W就代表它们之间直接相连
			if (_matrix[front][i] != MAX_W && visited[i] == false)
			{
				visited[i] = true;
				q.push(i);
			}
		}
	}
}

深度优先遍历

深度优先遍历过程类似于二叉树的先序遍历,从起始顶点开始不断对顶点进行深入遍历

在这里插入图片描述
比如现在要找东西,假设有三个抽屉,东西在那个抽屉不清楚,现在要将其找到,广度优先遍历的做法是:

  • 先将第一个抽屉打开,在最外层找一遍
  • 将第一个抽屉中红盒子打开,在红盒子中找一遍
  • 将红盒子中绿盒子打开,在绿盒子中找一遍
  • 递归查找剩余的两个盒子
    在这里插入图片描述

深度优先遍历:将一个抽屉一次性遍历完(包括该抽屉中包含的小盒子),再去递归遍历其他盒子

  • 深度优先遍历可以通过递归实现,同时也需要借助一个标记数组来记录各个顶点是否被访问过。
  • 从起始顶点处开始进行递归遍历,在遍历过程中先对当前顶点进行访问,并将其标记为访问过,然后判断该顶点是否有邻接顶点,如果有邻接顶点并且该邻接顶点没有被访问过,则递归遍历该邻接顶点。
void _DFS(size_t srci, vector<bool>& visited)
{
	cout << srci << ":" << _vertexs[srci] << endl;
	visited[srci] = true;

	// 找一个srci相邻的没有访问过的点,去往深度遍历
	for (size_t i = 0; i < _vertexs.size(); ++i)
	{
		if (_matrix[srci][i] != MAX_W && visited[i] == false)
		{
			_DFS(i, visited);
		}
	}

}

void DFS(const V& src)
{
	size_t srci = GetVertexIndex(src);
	vector<bool> visited(_vertexs.size(), false);

	_DFS(srci, visited);
}

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

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

相关文章

【第十二周】李宏毅机器学习笔记10:生成式对抗网络2

目录 摘要Abstract1.GAN is Still Challenging2.Evaluation of Generation2.1 Mode Collapse2.2.Mode Dropping2.3.Diversity 3.Conditional GAN4.Learning from Unpaired Data总结 摘要 本周主要学习了上周关于生成式对抗网络的剩余知识&#xff0c;了解了为什么 GAN 难以训练…

2024全球超模大赛(北京|山东|内蒙三城联动)顺利举办

近日&#xff0c;2024 全球超模大赛&#xff08;北京|山东|内蒙&#xff09;三城联动暨新国潮文化赛事主题发布会在紫薇美力集团国贸鲁采赋盛大举行。此次发布会旨在鼓励优质模特共同传播中国传统文化&#xff0c;让其在全球范围内绽放光彩&#xff0c;展现中国人的骄傲与风采&…

怎么开通GitHub Copilot?不会开通GitHub Copilot?一文看懂

GitHub Copilot 简介 GitHub Copilot 是由 GitHub 推出的一种人工智能编程助手&#xff0c;旨在帮助开发者更快速、更高效地编写代码。GitHub Copilot 是基于 OpenAI 的 GPT&#xff08;Generative Pre-trained Transformer&#xff09;模型开发的&#xff0c;它能够通过理解编…

艾迈斯欧司朗与小象光显联合发布全新uLED智能投影灯,打造多元、交互的智慧城市新视像

艾迈斯欧司朗今日宣布&#xff0c;艾迈斯欧司朗携手微型投影模块供应商小象光显在第二十五届中国国际光电博览会&#xff08;以下简称&#xff1a;CIOE&#xff09;期间联合发布全新uLED智能投影灯MLP3000。这款极具创新的uLED智能投影灯由小象设计&#xff0c;采用了艾迈斯欧司…

Linux高级I/O:多路转接模型

目录 一.常见的IO模型介绍二.多路转接I/O1.select1.1.函数解析1.2. select特点和缺点1.3.基于 select 的多客户端网络服务器 2.poll2.1.poll函数解析2.2.poll特点和缺点2.3.基于poll的tcp服务器 3.epoll3.1.系列函数解析3.2.epoll原理解析2.3.基于 select 的多客户端网络服务器…

石油高压胶管的种类和测量方法

关键字:石油高压胶管,高压胶管测径仪,高压胶管种类,高压胶管生产线, 高压钢丝缠绕胶管, 高压钢丝编织胶管,胶管测径仪,非接触测径仪, 石油高压胶管在石油行业中扮演着至关重要的角色&#xff0c;主要用于高压流体输送&#xff0c;特别是在矿井液压支架、油田开发、工程建筑等领…

文件(打开关闭读写) C语言

一、文件 二、打开文件 关闭文件 FILE *fopen(const char *path, const char *mode); 功能: 打开文件&#xff0c;获得对应的流指针数&#xff1a; "r" 只读方式&#xff0c;文件必须存在&#xff0c;不存在则报错 "r" 读写方式&…

VS2019配置Open3Dv0.18.0版本库

文章目录 一、引言二、配置过程三、举个例子参考资料一、引言 现在如果直接使用vs2019对Open3D(v0.15.2)进行编译,会比较麻烦,一是需要科学上网,另一个就是容易出现错误,这里就仍然按照之前的思路来配置新版本的Open3D(VS2015(及以上版本)配置Open3Dv0.15.2版本库)。 二…

计算机毕业设计 | SSM 凌云招聘平台 求职问答审批系统(附源码)

1&#xff0c;绪论 人力资源是企业产生效益、创造利润的必不可少的、最重要的资源。人作为人力资源的个体可看作是一个承载着有效知识、能力的信息单元。这样的信息单元可看作是一个为企业产生价值和利润的个体。从而使得这样的信息单元所具有的信息就是一个有价值的信息。 校…

Android使用OpenCV 4.5.0实现扑克牌识别(源码分享)

一、显示效果展示 二、OpenCV 4.5.0 OpenCV 4.5.0是OpenCV&#xff08;Open Source Computer Vision Library&#xff0c;开源计算机视觉库&#xff09;的一个重要更新版本&#xff0c;该版本在多个方面进行了优化和新增了多项功能。 三、ONNX模型 ONNX&#xff08;Open Neu…

YOLO V10简单使用

一.环境安装 1、下载官方源码 官方GitHub地址&#xff1a;https://github.com/THU-MIG/yolov10 点击跳转 2. 配置conda环境 在conda创建python3.9环境 conda create -n yolov10 python3.9激活切换到创建的python3.9环境 conda activate yolov103. 安装YOLOv10依赖 切换…

GitHub上图像超分开源项目推荐【持续更新】

RAISR 介绍&#xff1a;RAISR&#xff08;Rapid and Accurate Image Super-Resolution&#xff09;是一种由Google开发的图像超分辨率技术&#xff0c;它利用机器学习算法来提高低分辨率图像的质量&#xff0c;使其看起来更加清晰和细致。这项技术可以在移动设备上实时运行&am…

JBoss EJBInvokerServlet CVE-2013-4810 反序列化漏洞

环境 vulhub/jboss/JMXInvokerServlet-deserialization 复现 此漏洞存在于JBoss中 /invoker/JMXInvokerServlet 路径。访问若提示下载 JMXInvokerServlet&#xff0c;则可能存在漏洞&#xff1a; 1.访问123.57.211.129:8081/invoker/JMXInvokerServlet 使⽤JavaDeserH2HC进…

聊聊通过「白包账号」能否提高谷歌上架成功率?

大家好&#xff0c;我是牢鹅&#xff01;按国际惯例先吐槽下谷歌&#xff0c;近一年来对谷歌开发者来说很难&#xff0c;一方面谷歌政策严厉打击&#xff1b;另一方面审查机制不够健全&#xff0c;过分依赖大模型驱动审核&#xff0c;改善他们所谓的执行力。与苹果相比&#xf…

Easy Excel从入门到精通!!!

目录 1.文件导入 1.1基本方式读取excel文件内容 1.2注解模型映射器读取excel 1.3多行表头读取 1.4文件上传读取 2.文件导出 2.1基本方式导出 2.2模型映射导出 2.3设置行高、列宽等内容 2.4合并单元格 2.5导出设置超链接、批注、公式 2.6模板填充对象导出 2.7模板填…

AI大模型日报#0923:李飞飞创业之后首个专访、华为云+腾讯音乐发布昇腾适配方案

导读&#xff1a;AI大模型日报&#xff0c;爬虫LLM自动生成&#xff0c;一文览尽每日AI大模型要点资讯&#xff01;目前采用“文心一言”&#xff08;ERNIE-4.0-8K-latest&#xff09;、“智谱AI”&#xff08;glm-4-0520&#xff09;生成了今日要点以及每条资讯的摘要。欢迎阅…

2024个人简历模板免费可编辑,可能是整理最全的简历(支持Word格式下载)

提供各行业简历模板WORD可编辑格式下载&#xff0c;涵盖求职简历模板、大学生简历模板、个人简历模板、留学简历模板、英文简历模板、免费简历模板、工作简历模板、保研简历模板、暑期实习简历、寒假实习简历、校招简历等。 都是word格式&#xff0c;直接下载就能用。 网盘链…

【重磅】考虑火电机组储热改造的电力系统低碳经济调度

目录 1 主要内容 储热改造原理 约束条件 2 部分程序 3 程序结果 4 下载链接 1 主要内容 该程序参考文献《考虑火电机组储热改造的电力系统低碳经济调度》&#xff0c;利用原文献火电机组储热改造方案建立模型&#xff0c;在传统火电机组的基础上加装热能存储系统&#xf…

BEV学习--Nuscenes数据集解读

一、Nuscenes数据集简介 Nuscenes数据的采集来自不同城市的1000个场景中&#xff0c;采集车上配备了完善的传感器&#xff0c;包括6个相机&#xff08;CAM&#xff09;、1个激光雷达&#xff08;LIDAR&#xff09;、5个毫米波雷达&#xff08;RADAR&#xff09;、IMU和GPS&…

【RabbitMQ】RabbitMQ 的概念以及使用RabbitMQ编写生产者消费者代码

目录 1. RabbitMQ 核心概念 1.1生产者和消费者 1.2 Connection和Channel 1.3 Virtual host 1.4 Queue 1.5 Exchange 1.6 RabbitMO工作流程 2. AMQP 3.RabbitMO快速入门 3.1.引入依赖 3.2.编写生产者代码 ​3.3.编写消费者代码 4.源码 1. RabbitMQ 核心概念 在安装…