首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

的遍历(下)——邻接

概述 在我的上一篇博客:的遍历(上)——邻接矩阵 中主要介绍了邻接矩阵的BFS和递归的DFS与非递归的DFS这3种遍历算法。在这篇博客我将主要叙述邻接的以上3中遍历算法。...首先来看看邻接的表示方法。 邻接主要是针对稀疏图中邻接矩阵造成的空间浪费而提出的。下面我们来看看邻接的表示。 1)无向的表示 ? 2)有向 ?...(说明:对于BFS,DFS的递归与非递归算法在这篇文章就不再重复,如有不了解请移步我的上一篇博客:的遍历(上)——邻接矩阵 ) ---- 广度优先遍历(BFS) //广度优先遍历(BFS) void...#include #include #include #include using namespace std; //边...return this->next; } }; class Graph{ private: vector Edgelist; //邻接

84610
您找到你想要的搜索结果了吗?
是的
没有找到

数据结构 邻接

呃,下面该写邻接了……. 邻接的出现是因为若是稀疏,用邻接矩阵会造成空间的浪费,毕竟你要开辟一个一维数组和一个二维数组嘛,而且还是大开小用的那种。...邻接为了避免内存的浪费引入了链式存储,它的处理办法是: 1.用一个一维数组存储顶点,当然你也可以用单链表存储, 2.用单链表存储顶点的邻接点,可以将顶点改为结构体数组,结构体中存放邻接点的指针,邻接点也创建一个结构体...下面是一个无向的网邻接中数据的存储图示如下(emmm,无向果然没有有向好画): emmm,终于画完了,我来介绍下这个 顶点也就是个结构体数组,是存放顶点的结构,顶点中有data元素...边也是一个结构体,内有adivex元素,存放邻接点的下标,weight存放顶点与邻接点之间线的权重,next是边结构体指针,存放该顶点的下一个邻接点,next就是负责将顶点的邻接点连起来。...numvertex; //当前邻接的顶点数 int numarc; //当前邻接的边数 }GraphAdjList; //建立邻接 void CreateAdjListGraph

98820

邻接

邻接矩阵缺点: 邻接矩阵是不错的存储结构,但是我们发现,对于边数相对于顶点较少的,这种结构是存在对存储空间的极大浪费的 因此在处理稀疏时,可以采用下面将要介绍的邻接 ? ? 无向邻接 ?...有向邻接 ? ? ? 网邻接 ? 邻接存储有向 ? 有向邻接的构造函数初始化操作 ? ? ? 邻接的构造函数和输出函数代码实现 ?...因为邻接来查询某个顶点的入度非常繁琐,因此为了解决查找入度麻烦的问题,引出了逆邻接 ?...因为一个用两个来表示,占据存储空间很大,因此我们需要将这两个合并在一起,就诞生了一种新的存储方式 十字链表----有向 ?...邻接矩阵和邻接性能比较 ?

57210

【图论-存邻接矩阵 邻接 链式前向星

这篇文章主要来讲一下邻接矩阵 邻接 链式前向星(本篇需要具备一定的基础知识,至少邻接矩阵之前要会,这里主要讲解邻接和链式前向星) 我不大喜欢说废话,所以直接上图 邻接矩阵:用二维数组存储点与点之间的关系...没错,所以在一定程度上,我认为邻接其实就是邻接矩阵把那些没必要的点给扣掉。...edge; //这里使用动态数组,使用普通数组也是可以的 vectore; vectorhead;//建议从1开始存,其值是指向一个e的下标 其实链式前向星,我个人觉得,可以简单理解为邻接的降为...-1的,我们把-1赋值给e[0]的next;后面同理,如果又要插入一条边为1 4 3的话,那e[1]的话,存储的值就是:4 3 0(0是head[1]插入当前结点之前的值),这样我们就有把它像邻接一样给连起来了...当然如果你要弄成无向的话,再反过来添加就可以了 如果是无向的话,插入第一个点是这样的 然后,我们把1 4 3插入(这个因为是无向,所以这个地方,e的下标是2) 所以说这个插入顺序和链接顺序有点像栈

51353

邻接邻接矩阵

邻接邻接矩阵是的两种常用存储表示方式,用于记录图中任意两个顶点之间的连通关系,包括权值。对于 而言,其中 表示顶点集合, 表示边集合。...对于有向 digraph,的顶点集合和边集合如下:?邻接无向 graph 表示?有向 digraph 表示?若采用邻接表表示,则需要申请|V|个列表,每个列表存储一个顶点出发的所有相邻顶点。...因为需要申请大小为|V的数组来保存节点,对节点分配序号,所以需要申请大小为|V的额外存储空间,即邻接方式的存储空间复杂度为O(|V|+|E|)。邻接矩阵无向 graph 表示?...有向 digraph 表示?若采用邻接矩阵表示,则需要申请空间大小为 的二维数组,在二位数组中保存每两个顶点之间的连通关系,则无论有向或无向邻接矩阵方式的存储空间复杂度皆为 。...两种存储结构对比根据邻接邻接矩阵的结构特性可知,当图为稀疏、顶点较多,即结构比较大时,更适宜选择邻接作为存储结构。

1.8K00

描述的两种数据结构 - 邻接邻接矩阵

邻接邻接矩阵是两种常用的表示的数据结构,用于描述图中各个顶点之间的连接关系。 是由一组顶点和一组边组成的数据结构,顶点表示图中的对象,边表示对象之间的关系。...邻接邻接矩阵都可以有效地表示的结构,并提供了不同的优势和适用场景。 邻接邻接是一种链表的集合,用于表示图中每个顶点以及与之相邻的顶点。...示例: 考虑下面这个无向: A / \ B---C / \ / \ D---E---F 使用邻接来表示该的结构如下: A -> B -> C B -> A -> C...邻接的优点是对稀疏(边数相对顶点数较少)非常高效。它节省了存储空间,因为只需要存储与每个顶点相邻的顶点列表。在图中添加或删除边的操作上,邻接的时间复杂度为O(1)。...综上所述,邻接邻接矩阵都是常用的的表示方法,各自适用于不同的场景。邻接适合表示稀疏,可以节省存储空间,并且对于添加或删除边的操作效率较高。

45630

算法-LeetCode 133、207(拓扑排序,邻接建立)

给定无向连通图中一个节点的引用,返回该的深拷贝(克隆)。...无向是一个简单,这意味着图中没有重复的边,也没有自环。 由于是无向的,如果节点 p 是节点 q 的邻居,那么节点 q 也必须是节点 p 的邻居。 必须将给定节点的拷贝作为对克隆的引用返回。...解题思路: 克隆,并且是无向连通,因此可以使用map来保存两个节点之间的连接关系,如果在map中没有该节点tmp,则新建节点tmp_copy将该节点存入map中,然后遍历该节点的所有邻居,并递拷贝其所有邻居节点至...return tmp; } }; 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/clone-graph 【LeetCode #207】课程...说明: 输入的先决条件是由边缘列表表示的图形,而不是邻接矩阵。详情请参见图的表示法。 你可以假定输入的先决条件中没有重复的边。

1.2K20

数据结构:的存储结构之邻接

对于来说,邻接矩阵是不错的一种图存储结构,但是我们也发现,对于边数相对顶点较少的,这种结构是存在对存储空间的极大浪费的。...因此我们考虑另外一种存储结构方式:邻接(Adjacency List),即数组与链表相结合的存储方法。 邻接的处理方法是这样的。...2、图中每个顶点vi的所有邻接点构成一个线性,由于邻接点的个数不定,所以用单链表存储,无向称为顶点vi的边,有向称为顶点vi作为弧尾的出边。 例如图7-4-6就是一个无向邻接结构。...若是有向邻接的结构是类似的,如图7-4-7,以顶点作为弧尾来存储边容易得到每个顶点的出度,而以顶点为弧头的容易得到顶点的入度,即逆邻接。 ?...下面示例无向邻接创建:(改编自《大话数据结构》) #include using namespace std; #define MAXVEX 100 /* 最大顶点数,应由用户定义

3.3K81

5.2.2 邻接

所谓邻接就是对每个顶点vi建立一个单链表,第i个单链表中的结点表示依附于顶点vi的边(对于有向则是以顶点vi为尾的弧),这个单链表就称为顶点vi的边(对于有向则成为出边)。...int vexnum ,arcnum;//的顶点数和弧数 }ALGraph;//ALGraph 是以邻接存储的类型 邻接存储方式具有以下特点: ①如果G是无向,则所需的存储空间为...前者的倍数2是由于无向图中,每条边在邻接中出现了两次。 ②对于稀疏,采用邻接表表示将极大地节省存储空间。...④在有向邻接表表示中,求一个给定顶点的出度只需计算其邻接中的结点个数即可;但求其顶点的入度,则需要遍历全部的邻接。因此,也有人采用逆邻接的存储方式来加速求解给定顶点的入度。...当然,这实际上与邻接存储方式是类似的。 ⑤邻接表表示并不唯一,这是因为在每个顶点对应的单链表中,各边结点的链接次序可以是任意的,取决于建立邻接的算法以及边的输入次序。

68830

邻接详解(CC++)

提示:记得点赞关注加收藏 目录 一、概念 二、分类  1)无向邻接 2)有向邻接(出弧) 3)有向的逆邻接(入弧)  三.步骤 四、代码 ---- 提示:以下是本篇文章参考《算法训练营...二、分类  1)无向邻接 例如,一个无向及其邻接如下图所示。...无向邻接的特点如下。 • 如果无向有n 个节点、e 条边,则节点有n 个节点,邻接有2e 个节点。 • 节点的度为该节点后面单链表中的节点数。...2)有向邻接(出弧) 例如,一个有向及其邻接如下图所示。...3)有向的逆邻接(入弧) 有时为了方便得到节点的入度,可以建立一个有向的逆邻接,如下图所示。

60020

5.2.4 邻接多重

邻接多重时无向的另一种链式存储结构。 在邻接中,容易求得顶点和边的各种信息,但在邻接中求两个顶点之间是否存在边,或需要对边执行删除等操作时,需要分别在两个顶点的边中遍历,效率较低。...与十字链表类似,在邻接多重中,每一条边用一个结点表示,其结构如下图: mark ivex ilink jvex jlink info 其中,mark为标志域,可以用以标记该条是否被搜索过;ivex...在邻接多重中,所有依附于同一顶点的边串联在同一链表中,由于每条边依附于两个顶点,则每个边结点同时链接在两个链表中。...顶点信息 ArcNode *firstedge;//指向第一条依附该顶点的边 }VNode; typedef struct{ VNode adjmulist[MaxVertexNum];//邻接...int vexnum ,arcnum;//的顶点数和弧数 }AMLGraph;//AMLGraph 是以邻接存储的类型

86610

数据结构(八):邻接邻接矩阵

邻接邻接矩阵是的两种常用存储表示方式,用于记录图中任意两个顶点之间的连通关系,包括权值。 对于 而言,其中 表示顶点集合, 表示边集合。...对于无向 graph,的顶点集合和边集合如下: graph 对于有向 digraph,的顶点集合和边集合如下: digraph 邻接 无向 graph 表示 graph_adjacency_list...如果 为有向,则 个列表存储的总顶点个数为 ;如果 为无向,则 个列表存储的总顶点个数为 (暂不考虑自回路)。即邻接方式的存储空间复杂度为 。...邻接矩阵 无向 graph 表示 graph_adjacency_matrix 有向 digraph 表示 digraph_adjacency_matrix 若采用邻接矩阵表示,则需要申请空间大小为...两种存储结构对比 根据邻接邻接矩阵的结构特性可知,当图为稀疏、顶点较多,即结构比较大时,更适宜选择邻接作为存储结构。

1.4K30

PTA 邻接存储的广度优先遍历(20 分)

6-2 邻接存储的广度优先遍历(20 分) 试实现邻接存储的广度优先遍历。...函数接口定义: void BFS ( LGraph Graph, Vertex S, void (*Visit)(Vertex) ); 其中LGraph是邻接存储的,定义如下: /* 邻接点的定义...; /* 边表头指针 */ } AdjList[MaxVertexNum]; /* AdjList是邻接类型 */ /* 结点的定义 */ typedef struct GNode *PtrToGNode...PtrToGNode LGraph; /* 以邻接方式存储的类型 */ 函数BFS应从第S个顶点出发对邻接存储的Graph进行广度优先搜索,遍历时用裁判定义的函数Visit访问每个顶点。...PtrToGNode LGraph; /* 以邻接方式存储的类型 */ bool Visited[MaxVertexNum]; /* 顶点的访问标记 */ LGraph CreateGraph

2.6K80
领券