数据结构中图的概念以及遍历算法的实现

在数据结构中,图(Graph)是由节点(Vertex)和连接节点的边(Edge)组成的一种非线性数据结构。图可以用来表示各种实际问题中的关系和连接,如社交网络、道路网络、电路等。

图由两个主要部分组成:节点和边。节点表示实体或对象,而边表示节点之间的连接关系。图可以分为有向图(Directed Graph)和无向图(Undirected Graph)两种类型。在有向图中,边有方向,表示从一个节点到另一个节点的单向关系;而在无向图中,边没有方向,表示节点之间的双向关系。

图的常用代码实现方式有两种:邻接矩阵(Adjacency Matrix)和邻接表(Adjacency List)。

1. 邻接矩阵:
   邻接矩阵是一个二维数组,用于表示图中节点之间的连接关系。如果图有 \(n\) 个节点,那么邻接矩阵就是一个大小为 \(n \times n\) 的矩阵。对于无向图,邻接矩阵是对称的;对于有向图,邻接矩阵可能不对称。邻接矩阵中的元素表示节点之间是否存在边,可以用 0 和 1 表示,或者用其他值表示边的权重。

   例如,以下是一个无向图的邻接矩阵表示:


   0  1  1  0 
   1  0  1  1 
   1  1  0  0 
   0  1  0  0 
   

   在邻接矩阵中,行号和列号对应于节点的标识符,矩阵中的元素表示对应节点之间是否存在边。

2. 邻接表:
   邻接表是一种更紧凑的图表示方法,它使用一个数组和一组链表来表示图中的节点和边。数组的每个元素对应一个节点,而链表中的每个节点表示与该节点相邻的节点。

   例如,以下是一个无向图的邻接表表示:


   0  : [1, 2] 
   1  : [0, 2, 3] 
   2  : [0, 1]
   3  : [1]

   在邻接表中,数组的索引表示节点的标识符,链表中的元素表示与该节点相邻的节点。

这些是图的常用代码表示方法,选择哪种方法取决于具体的应用场景和操作需求。

当涉及到图的遍历时,常用的算法是深度优先搜索(Depth-First Search,DFS)和广度优先搜索(Breadth-First Search,BFS)。下面是它们的代码实现:

深度优先搜索(Depth-First Search,DFS):

def dfs(graph, start):visited = set()  # 用集合来存储已访问的节点stack = [start]  # 用栈来实现深度优先搜索while stack:vertex = stack.pop()  # 从栈中弹出一个节点if vertex not in visited:print(vertex)  # 访问该节点visited.add(vertex)  # 将节点标记为已访问# 将该节点的邻接节点按逆序推入栈中for neighbor in reversed(graph[vertex]):if neighbor not in visited:stack.append(neighbor)

广度优先搜索(Breadth-First Search,BFS):

from collections import dequedef bfs(graph, start):visited = set()  # 用集合来存储已访问的节点queue = deque([start])  # 用队列来实现广度优先搜索while queue:vertex = queue.popleft()  # 从队列左侧弹出一个节点if vertex not in visited:print(vertex)  # 访问该节点visited.add(vertex)  # 将节点标记为已访问# 将该节点的邻接节点推入队列中for neighbor in graph[vertex]:if neighbor not in visited:queue.append(neighbor)

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

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

相关文章

2023年全球架构师峰会(ArchSummit北京站2023):核心内容与学习收获(附大会核心PPT下载)

本次峰会是一场集结了全球顶级技术专家和行业领袖的盛会。作为一年一度的重要技术交流活动,本次峰会聚焦当前及未来软件架构的发展趋势、技术挑战与创新实践,旨在为参会者提供一个深度交流、学习与合作的平台。在为期两天的会议中,与会者不仅…

SQL Developer 小贴士:Unshared Worksheet

在Oracle SQL Developer中,最常用的功能应该是SQL Worksheet,或Worksheet。 可以创建两类Worksheet,即Worksheet和Unshared Worksheets。前者是共享数据库连接的,后者会单独创建自己的连接。前者的快捷键是AltF10;后者…

ACK One:构建混合云同城容灾系统

作者:蔡靖 对于当前业务运行在 IDC 内的 Kubernetes 集群中,希望通过云计算为云下业务提供同城灾备的高可用冗余能力,可利用阿里云分布式云容器平台 ACK One [ 1] 来提供统一得流量、应用和集群管理,实现业务流量的多集群路由和灾…

学习Android的第十六天

目录 Android 自定义 Adapter Adapter 接口 SpinnerAdapter ListAdapter BaseAdapter 自定义 BaseAdapter 参考文档 Android ListView 列表控件 ListView 的属性和方法 表头表尾分割线的设置 列表从底部开始显示 android:stackFromBottom 设置点击颜色 cacheColorH…

【Linux】28、命令行参数 语法格式

文章目录 一、没有括号二、[]三、{}四、<>五、...六、|七、() 命令行参数很复杂&#xff0c;通过 --help 会看到很多符号&#xff0c;比如 [] {} () <> | …&#xff0c;他们都是什么意思呢&#xff1f;一般格式如下&#xff1a; 命令<必选参数1|必选参数2>…

【自然语言处理】:实验4布置,预训练语言模型实现与应用

清华大学驭风计划 因为篇幅原因实验答案分开上传&#xff0c;自然语言处理专栏持续更新中&#xff0c;期待的小伙伴敬请关注 有任何疑问或者问题&#xff0c;也欢迎私信博主&#xff0c;大家可以相互讨论交流哟~~ 案例简介 2018年&#xff0c;Google提出了预训练语言模型BE…

基于PSO优化的GRU多输入时序回归预测(Matlab)粒子群优化门控循环单元神经网络时序回归预测

目录 一、程序及算法内容介绍&#xff1a; 基本内容&#xff1a; 亮点与优势&#xff1a; 二、实际运行效果&#xff1a; 三、部分程序&#xff1a; 四、完整代码数据分享下载&#xff1a; 一、程序及算法内容介绍&#xff1a; 基本内容&#xff1a; 本代码基于Matlab平台…

扩展语音识别系统:增强功能与多语言支持

一、引言 在之前的博客中&#xff0c;我们成功构建了一个基于LibriSpeech数据集的英文语音识别系统。现在&#xff0c;我们将对系统进行扩展&#xff0c;增加一些增强功能&#xff0c;并尝试支持多语言识别。 二、增加增强功能 语音合成 --除了语音识别&#xff0c;我们还可以…

文物保护系统守护历史岁月,成都青铜展科技闪耀

一、“吉金万里-中国西南青铜文明展”隆重开幕 1月27日&#xff0c;“吉金万里-中国西南青铜文明展”在成都金沙遗址博物馆向公众开放&#xff0c;奉上一场精彩的青铜文明“盛宴”。本次展览汇集了中国西南地区32家文博单位&#xff0c;以青铜器为代表的294件经典文物&#xf…

OBD部署OceanBase集群-配置文件方式

前一篇文章介绍了OBD白屏可视化方式部署OceanBase集群 &#xff0c;其原理是把可视化设置生成为一个配置文件&#xff0c;然后使用OBD命令部署集群 本篇想使用命令行加配置文件方式&#xff0c;只部署OceanBase和ODProxy两个组件 服务器参数配置和 oceanbase-all-in-one-*.ta…

LeetCode 0589.N 叉树的前序遍历:深度优先搜索(DFS)

【LetMeFly】589.N 叉树的前序遍历&#xff1a;深度优先搜索(DFS) 力扣题目链接&#xff1a;https://leetcode.cn/problems/n-ary-tree-preorder-traversal/ 给定一个 n 叉树的根节点 root &#xff0c;返回 其节点值的 前序遍历 。 n 叉树 在输入中按层序遍历进行序列化表…

及其详细的Markdown基础-学习笔记(附有使用案例)

Markdown 基础语法 查看更多学习笔记&#xff1a;GitHub&#xff1a;LoveEmiliaForever 标题创建 标题语法格式 在文字前添加一至六个#即可创建标题 标题是有等级的&#xff0c;具体等级根据#个数决定 由于标题等级参与构建整篇文章的架构&#xff0c;编写时应该遵循如下规…

第九篇:node静态文件服务(中间件)

&#x1f3ac; 江城开朗的豌豆&#xff1a;个人主页 &#x1f525; 个人专栏 :《 VUE 》 《 javaScript 》 &#x1f4dd; 个人网站 :《 江城开朗的豌豆&#x1fadb; 》 ⛺️ 生活的理想&#xff0c;就是为了理想的生活 ! &#x1f4d8; 引言&#xff1a; 当今互联网时代&am…

JavaScript中延迟加载的方式有哪些

在web前端开发中&#xff0c;性能优化一直是一个非常重要的话题。当我们开发一个页面时&#xff0c;为了提高用户的体验和页面加载速度&#xff0c;我们往往需要采用一些延迟加载的技术。JavaScript中延迟加载的方式有很多种&#xff0c;下面我将为大家详细介绍几种常用的方式。…

android studio模拟器不能打开

Andriod:The selected AVD is currently running in the Emulator. Please exit the emulator instance… 1.点击 2.删除下面文件 3.重新打开即可 参考

Midjourney Niji魔法绽放:风格各异、场景多变的动漫女孩

所有的提示词&#xff0c;gzh&#xff1a;七哥的AI日常 大家好&#xff0c;欢迎回来&#xff0c;今天我们继续学习niji。 今天我们为大家制作了29款可爱的风格各异的女孩图片&#xff0c;可用于制作手机壁纸、海报、宣传画包括卡头人像垫图等&#xff0c;图片风格各异&#x…

天锐绿盾 | 企业办公、设计院、设计行业图档加密系统、办公核心文件数据\资料防泄密软件

天锐绿盾作为一款专业的企业信息化安全管理解决方案&#xff0c;特别适用于企业办公、设计院、设计行业等场景&#xff0c;为这些行业提供图档加密系统和办公核心文件数据防泄密软件。 PC端&#xff1a;https://isite.baidu.com/site/wjz012xr/2eae091d-1b97-4276-90bc-6757c5d…

一起玩儿物联网人工智能小车(ESP32)——63 SD和TF卡模块的使用

摘要&#xff1a;本文介绍SD和TF卡模块的使用方法 前面介绍了非易失性存储的使用方法&#xff0c;由于空间和本身只支持键值对的限制&#xff0c;非易失性存储只适用于少量数据的记录。而不适用于各种声音、图片、大量数据等情况的使用。这时候就需要有文件系统或者更大容量存…

如何将OpenAI Sora生成的普通AI视频转化为Vision Pro的空间视频,沉浸式体验

【基于AI的Vision Pro空间视频】工作流:这个工作流程用于将2D视频转换为适用于 Vision Pro的Spatial视频: 1、使用Deep3D将2D视频转换为3D SBS: 使用Deep3D工具将2D视频转换为3D SBS格式: 转换例子:Prediction– lucataco/deep3d – Replicatehttps://replicate.com/…

Linux 性能分析工具汇总

Linux 性能分析工具汇总 出于对Linux操作系统的兴趣&#xff0c;以及对底层知识的强烈欲望&#xff0c;因此整理了这篇文章。本文也可以作为检验基础知识的指标&#xff0c;另外文章涵盖了一个系统的方方面面。如果没有完善的计算机系统知识&#xff0c;网络知识和操作系统知识…