4.图
图(Graph)G由两个集合V(Vertex)和E(Edge)组成,记为G=(V,E),其中V是顶点的有限集合,记为V(G),E是连接V中两个不同顶点(顶点对)的边的有限集合,记为E(G)。
图一般可以采用三种方式来表示:使用一个二维数组;使用邻接表;使用边数组。图的遍历一般有深度优先的方式和广度优先的方式。
所谓深度优先:从图中某个初始顶点v出发,首先访问初始顶点v,然后选择一个与顶点v相邻且没被访问过的顶点w为初始顶点,再从w出发进行深度优先搜索,直到图中与当前顶点v邻接的所有顶点都被访问过为止。显然,这个遍历过程是个递归过程。
所谓广度优先:首先访问初始点vi,接着访问vi的所有未被访问过的邻接点vi1,vi2,…,vit,然后再按照vi1,vi2,…,vit的次序,访问每一个顶点的所有未被访问过的邻接点,依次类推,直到图中所有和初始点vi有路径相通的顶点都被访问过为止。
深度优先的伪码:
procedure dfs(G,v)
input: G=(V,E) is a graph;v∈V;
output: visited(u) is set to true for all nodes u reachable from v
visited(v)=true;
previsit(v);
for each edge(v,u) ∈E:
if not visited(u):dfs(u)
postvisit(v);
广度优先的伪码:
procedure dfs(G,s)
input: G=(V,E) is a graph;s∈V;
output: visited(u) is set to true for all nodes u reachable from v
Q=[s] (queue contains just s)
while Q is not empty
u=Q.remove();
visited(u)=true;
for all edges (u,v) ∈ E
if visited(v) is false
Q.insert(v);
小结:图的遍历算法DFS和BFS在实现时也就是采用的数据结构不一样而已,一个是采用栈(Stack),一个是采用队列(Queue),其实这里的数据结构都是采用一些特殊的数据结构而已。一个是FILO的Stack,一个是采用FIFO的Queue,未访问过的顶点都是放在Stack和Queue里的。对这些顶点的处理则采用FILO和FIFO的原则。OK,如果我们现在把未访问过的顶点的放进一个容器里,之后按照一定的规则取出这些顶点,那么就得到另一些图的算法了。如果是随机取出的,那么就是随机游走的算法了。后面的最小生成树,最短路径的算法都可以看作在这些基础上的算法。
分享到:
相关推荐
本文将深入探讨该版本的数据结构,帮助用户更好地理解和管理系统中的数据。 一、数据库设计 通达OA的核心是其数据库设计,它采用关系型数据库管理系统(RDBMS),如MySQL或SQL Server,以存储和管理各类业务数据。...
数据结构分为四种基本类型:集合、线性结构、树型结构和图状结构。集合中的元素没有特定关系;线性结构如数组,元素间一对一关联;树型结构如文件系统,元素间存在一对多关系;图状结构则体现多对多的复杂关系。此外...
本项目聚焦于“串”的基本操作,这是一种常见的线性数据结构,通常用于存储文本信息。在这里,我们将深入探讨串的基本操作,以及如何通过编程实现这些操作。 串是由字符组成的序列,通常在许多编程语言中被表示为...
再来说说队列,它是另一种基本的数据结构,遵循先进先出(FIFO)的原则。在Java中,队列可以通过`java.util.Queue`接口实现,常见的实现类有`LinkedList`和`ArrayDeque`。队列的主要操作包括入队(enqueue,将元素...
作者采用了独特的方法将数据结构分成说明和实现两部分,并充分利用了已有的数据结构库(Java集合类API)。本书分为四个部分:第一部分讨论适合大多数应用的集合类API的一个子集,并覆盖基本的算法分析技术、递归和...
联众HIS1.0版数据结构说明书详细阐述了该医疗信息系统的数据组织方式,为理解和操作该系统提供了基础。HIS(Hospital Information System)是医院信息系统,它整合了医院内的各种信息资源,实现了医疗业务流程的自动...
在这个《数据结构课程设计》项目中,我们专注于二叉树的基本操作,通过两个源文件(file1.cpp 和 file2.cpp)以及一个头文件(head.h)实现了一系列的二叉树操作。以下是这些操作的详细说明: 1. **创建二叉树**:...
1. **数据结构基础**:首先,我们需要理解基本的数据结构类型,如数组、链表、栈、队列等。数组是最基础的数据结构,提供随机访问;链表允许动态插入和删除,但访问效率较低;栈遵循“后进先出”(LIFO)原则,常...
作者采用了独特的方法将数据结构分成说明和实现两部分,并充分利用了已有的数据结构库(Java集合类API)。本书分为四个部分:第一部分讨论适合大多数应用的集合类API的一个子集,并覆盖基本的算法分析技术、递归和...
本资源提供了数据结构题集的完整答案,涵盖了数据结构的基本概念、抽象数据类型、存储结构、数据类型等方面的知识点。下面是对资源中提到的知识点的详细解释: 1. 数据结构的基本概念 根据题目,数据是对客观事物...
2. **数据结构选择**:说明所选用的数据结构,比如可能选择链表实现队列,二叉树实现搜索结构等,解释选择的理由。 3. **算法设计**:详细描述用于操作数据结构的算法,如排序、查找等,可以包括插入、删除、查找等...
接下来,我将详细说明算法文档和基本数据结构中的一些关键知识点。 算法文档的写作通常遵循以下结构: 1. 引言:这部分一般会解释算法的背景,应用场景以及算法的目的和功能。 2. 算法描述:这是算法文档的核心...
数据结构作业通常会涵盖这些基本数据结构的操作,例如,用C++实现栈的基本操作、链表的反转、二叉树的遍历等,以提升对数据结构的实际运用能力。 四、数据结构学习指导 学习数据结构时,应理解每个结构的特性和适用...
本书对每一种数据结构都给出了相应的抽象数据类型规范说明和实现方法,使得学生能够掌握每种数据结构的逻辑结构和存储结构,并能够分析和比较不同算法的性能。 该书采用类C语言描述数据结构和算法,考虑到C语言的...
第一部分:数据结构与算法的基本概念 考核内容: 算法、算法正确性、复杂性; 算法的时间与空间复杂性级别; 数据类型、数据结构和表示、实现; 抽象数据类型的说明、高级语言对抽象数据类型的支持 考核要求: 理解...
基于C语言实现的基本数据结构定义以及简单的解题应用项目源码.zip基于C语言实现的基本数据结构定义以及简单的解题应用项目源码.zip基于C语言实现的基本数据结构定义以及简单的解题应用项目源码.zip基于C语言实现的...
课程内容重点介绍了算法和数据结构的基本概念、理论及其在实际应用中的重要性。王教授的课程不仅深入浅出地讲述了理论知识,而且还注重实践应用,帮助学生掌握如何将复杂问题转化为计算机可处理的形式,并通过合理...
在这个资料包中,"数据结构 算法例题 以及常用的排序算法和文档说明"提供了丰富的学习资源,帮助我们深入理解这两个核心概念。 数据结构是组织和存储数据的方式,它决定了数据的访问效率和处理速度。常见的数据结构...
东南大学提供的数据结构课件是一份宝贵的教育资源,它以《数据结构(C++描述)》(金远平编著,清华大学出版社,2005)作为基础教材,并由陈钢老师负责讲解。在这份课件中,详细介绍了数据结构在软件开发中的重要性...