数据结构问题:图的深度优先遍历中有递归的应用,要用到栈,图中顶点是如何出栈进栈的?是进栈时访问还是

作者&投稿:花翠 (若有异议请与网页底部的电邮联系)
用邻接表表示图进行深度优先遍历时,通常采用()来实现算法~

使用栈来实现算法。
用邻接表表示图进行深度优先遍历时,通常采用栈来实现算法,广度遍历使用队列。

扩展材料:

深度优先遍历:类似与树的前序遍历。从图中的某个顶点v出发,访问此顶点,然后从v的未被访问到的邻接点进行遍历,直到图中所有和v有路径相通的顶点都被访问到
注:优先访问外层节点,访问到无新顶点时,会进行回退,访问未被访问过的分支顶点。
广度优先遍历:类似于树的层序遍历。从图中的某个顶点w出发,让顶点w入队,然后顶点w再出队,并让所有和顶点w相连的顶点入队,然后再出队一个顶点t,并让所有和t相连但未被访问过的顶点入队……由此循环,指定图中所有元素都出队。
参考资料来源:
知网论文-数据结构中图的遍历算法研究

广度优先用队列,深度优先用栈。简单说明如下:
广度优先:当一个节点被加入队列时,要标记为已遍历,遍历过程中,对于队列第一个元素,遍历其所有能够能一步达到的节点,如果是标记未遍历的,将其加入队列,从第一个元素出发所有能一步直接达到的节点遍历结束后将这个元素出列。
深度优先:当遍历到某个节点A时,如果是标记未遍历,将其入栈,遍历它能够一步直接达到的节点,如果是标记未遍历,将其入栈且标记为已遍历,然后对其进行类似A的操作,否则找能够一步直接达到的节点进行类似操作。直到所有能够一步直接达到的节点都已遍历,将A出栈。
这里使用“能够能一步达到的节点”而非“与其相邻的节点”是考虑到有向图因素。
具体可以找个图,然后使用广度和深度算法搜索一遍,每步自己手工修改队列和栈就明白怎么回事了。

首先你得明白函数调用本身就是通过栈来实现的。 调用函数是入栈,而函数返回是出栈。
为什么是栈, 你要知道栈的特性是 “后进先出”或者是“先进后出”, 而对于函数调用来说, 一定会有最先调用的函数,最后才返回。 举个例子: 函数a,b,c,d的调用关系是a调用b,b又调用c,c又调用d, 那么当d函数执行完后,它会返回到c,同时c执行完成后返回到b,最后返回到a。
所以函数调用的顺序是a->b->c->d
函数返回的顺序是d->c->b->a
很明显 想要实现这种效果就要依靠栈。
因此函数调用过程是有一个叫做“调用栈”来实现的。
递归函数同理,只不过上边的a,b,c,d全变成同一个函数a->a->a->a,为了人为能区分清楚,不防给a函数加上角标,来标记是第几层调用a1->a2->a3->a4 ,返回时a4->a3->a2->a1 这就是递归函数调用返回过程。
接下来 深度优先搜索(dfs)本身就是靠函数递归调用实现的。
对于一个图来说,是由结点和边构成的, 在存储时就需要用到
struct node {
int data;
struct node * next[CNT];
}
上边只是一种简单的定义,对一个结点来说主要就是2部分, 一为它所存的数据是什么(数据域),二为它能指向哪些其它的边(指针域)。
你问了这样的问题:这些顶点怎么进出栈?又是如何访问的?
这里我要解释下访问的意义, 访问应该是对节点的数据域进行某种操作, 一定要理解这句话,是对数据域进行某种操作, 对于上边定义的结构 data就是数据域, 我需要对data进行某种操作,比如调用printf输出data, 这就是一种操作, 而只有对data进行了printf之后才能说“访问了这个结点”, 否则,单纯的使用了节点的指针域不能说访问了节点。
因此,如何访问节点的, 什么时候访问的,就要由你来定,
如果是下面这样的写法:
void dfs(struct node* n)
{
if (n->next[0] == NULL) {
return ;
}
for (int i = 0; n->next[i] != NULL; i++) {
dfs(n->next[i]);

}
printf ("%d\n", n->data);
}
你可以看到,printf是在 dfs函数递归调用 “返回”的时候才会被调用,换句话说, 图中所有节点在从开始走到不能再往下走的一个节点时(某个节点没有指向其它指点的边了),返回,同时输出该节点的data。 这种情况下是“出栈时访问”
而当printf换到if语句前头时,则是“入栈时访问”。
这如同二叉数的三种顺序遍历,前、中、后序遍历区别在于 何时访问节点
如下是前序遍历
void preorder(node* n)
{
printf(n->data);

preorder(n->left);
preorder(n->right);

}
如下是后序遍历
void afterorder(node* n)
{
afterorder(n->left);
afterorder(n->right);

printf(n->data);
}
如下是中序遍历
void inorder(node* n)
{
inorder(n->left);
printf(n->data);
inorder(n->right);
}


如图是某一生物的细胞结构图.据图回答下列问题:(1)判断此图为...
(1)植物细胞基本结构:细胞壁、细胞膜、细胞核、细胞质、液泡、叶绿体等.动物细胞结构:细胞膜、细胞核、细胞质.该图中具有细胞壁、液泡、叶绿体,因此该图是植物细胞结构示意图.(2)细胞膜能控制物质进出.(3)液泡:液泡内的细胞液中溶解着多种物质;一般细胞中的带酸味、带甜、辣味的物质存在...

如图是人脑的结构图,根据图回答下列问题(1)___是神经系统最高级的部分...
(1)脑位于颅腔内,包括大脑、小脑和脑干三部分,其中大脑特别发达,大脑由两个大脑半球组成,大脑半球的表层是灰质,又叫大脑皮层,大脑皮层表面有许多凹陷的沟和隆起的回,这样就大大增加了大脑皮层的表面积.大脑皮层上的神经中枢是调节人体生命活动的最高级中枢.(2)小脑具有使运动协调、准确、维持...

如图1表示两种细胞的显微结构模式图,请据图回答下列问题:
解题思路:分析题图:图示是动植物细胞亚显微结构模式图,其中A是动物细胞,B是植物细胞,结构1~15依次表示细胞膜、液泡、细胞质基质、叶绿体、高尔基体、核仁、核液、内质网、线粒体、核孔、核糖体、染色质、中心体、核膜.(1)图AB都有核膜包被的细胞核和各种细胞器,不属于原核细胞.(2)8内质网...

如图是人耳的结构图,请据图分析下列问题:(1)图中能感受头部位置变化的...
如图所示各部分的结构为:1耳郭;2外耳道;3鼓膜;4半规管;5前庭;6耳蜗;7咽鼓管;(1)(2)(3)、耳的结构包括外耳、中耳和内耳.外耳包括1耳郭和2外耳道,它们分别有收集声波和传送声波的作用;中耳由3鼓膜、鼓室和听小骨组成,鼓膜的作用是当声波传送来时产生振动,鼓室内主要有三块听小...

建筑结构易错总结?
2)设计公司设计大样图。存在问题8:栏杆高度小于1100。解决措施:按规范执行。存在问题9:阳台栏杆的预埋件在主体施工时因没有栏杆的立杆间距而无法预留,在安装时又不允许打膨胀螺丝,造成要打掉结构。解决措施:设计确定间距及大样图。存在问题10:阳台镀锌钢管油漆脱落、生锈。解决措施:设计必须明确相匹配的油漆(瓷漆)存在...

如图是人体心脏结构示意图,据图回答下列问题:(1)在心脏的1、2、3...
如图所示结构为:1右心房;2左心房;3右心室;4左心室;5下腔静脉;6上腔静脉;7主动脉;8肺动脉;9肺静脉;10房室瓣;11动脉瓣;12动脉瓣;13房室瓣.(1)血液循环路线包括体循环和肺循环.体循环的路线为:左心室→主动脉→各级动脉→全身各处毛细血管→各级静脉→肺静脉→右心房,经过体...

如图所示动植物细胞结构模式图,据图回答下列问题:(1)图___示植物细胞...
(1)植物细胞和动物细胞的不同时植物细胞有细胞壁和液泡、叶绿体.图中的1是细胞膜;2是细胞质;3是细胞核;4是线粒体;5是液泡;6是细胞壁;7是叶绿体.可见图2细胞具有细胞壁和液泡,是植物细胞.细胞质的流动可以加速与外界的物质交换,细胞膜能够控制物质的进出,细胞核里有遗传物质;(2)植物...

(一)观察下列各结构模式图,并据图回答问题.(括号内填编号,横线上填文字...
(1)甲高等植物细胞和乙动物细胞都具有核膜包围的细胞核,都属于真核细胞;图戊属于病毒,没有细胞结构,由蛋白质和核酸组成,遗传物质是DNA或者RNA;图丁为细菌,没有核膜包围的细胞核,属于原核细胞.(2)图甲中③染色体,容易被碱性染料染成深色,如龙胆紫染液(醋酸洋红).(3)胃蛋白酶的化学...

如图是心脏结构模式图,请据图回答问题:(1)心脏分为四个腔,其中心肌最发...
与功能上的差别相适应,左心室的壁比右心室的壁厚.(2)心脏的结构及心脏各腔与血管的连接如图所示:因此与3右心房相连的血管有7上腔静脉、8下腔静脉.(3)根据循环途径的不同血液循环分为体循环和肺循环两部分,肺循环是指血液由右心室流入肺动脉,流经肺部的毛细血管网,再由肺静脉流回左心房...

【住宅建筑结构设计应注意的问题】什么是建筑结构设计
1 基本概念模糊的问题 在结构设计中,首先应正确选择设计简图,再根据作用在结构上的荷载选择合适的计算方法进行力学分析,然后进行截面设计。在设计中必须认真对待每一个步骤,才能保证工程设计的质量。但有时会出现图省事随意简化设计的情况,计算假定与实际结构不符,对于力学分析复杂的构件,时常忽略一些必要的计算数据,如...

亚东县13744612596: 一道数据结构中,..急8.设如左图所示,在下面的5个序列中,符合深度优先遍历的序列有多少?( D )a e b d f c a c f d e b a e d f c b a e f d c b a e f d b cA.5... -
潭山阿伐:[答案] 深度优先,顾名思义,首先选择按照深度来搜索遍历图,这个其实和图的数据结构的定义有关,大部分都是十字链表法吧...貌似...就是每个节点都有与他连接的节点的信息,深度就是首先遍历一个节点,然后按照中 先 或者后顺序遍历

亚东县13744612596: 数据结构深度优先遍历: -
潭山阿伐: 图的深度优先遍历类似于树的前序遍历.首先访问出发点a,并将其标记为已访问过;然后依次从a出发搜索a的每个邻接点b,c,e.若b未曾访问过,则以b为新的出发点继续进行深度优先遍历,直至图中所有和源点a有路径相通的顶点(亦称为从...

亚东县13744612596: 大神在哪里!数据结构问题啊! 用邻接表表示图进行深度优先遍历时,通常借助( )来实现算法. -
潭山阿伐:[选项] A. 栈 B. 队列 C. 树 D. 图

亚东县13744612596: 数据结构 深度优先遍历和广度 -
潭山阿伐: 无向图:两个结点之间的路径没有方向区分 有向图:两个结点之间的路径有方向区分,从A到B的路径长和从B到A的路径长可以不同 深度优先遍历:从给定结点出发,选取它的邻接结点中某个未被访问的结点访问.被访问的结点成为新的给定结点.重复上述过程,直到当前结点没有未被访问的邻接结点.接着开始回溯,返回上一次访问的结点继续寻找其未被访问的邻接结点,直至完成遍历. 广度优先遍历:从给定结点出发,依次访问它的所有邻接结点.然后按照这些结点的被访问顺序,依次访问这些结点的所有邻接结点.重复上述过程,直至完成遍历.

亚东县13744612596: 数据结构:图的深度优先遍历和广度优先遍历 -
潭山阿伐: 图的深度优先遍历:1->2->4->6->5->3 图的广度优先遍历:1->2->3->4->5->6

亚东县13744612596: 数据结构 深度优先遍历 -
潭山阿伐: 我帮你复习一下图的知识:1. 深度优先遍历:深度优先就是从树的某个节点开始搜索,查看它所有的领结点,如果这个邻接点的无其他邻接点,则忽略该节,再次访问下个节,以此类推,一直到访问到的邻接点再没有其它的邻接点为止,这个节...

亚东县13744612596: 关于数据结构中的图的深度遍历! -
潭山阿伐: 这图应该是有向图吧.AD是对的.B中a-c之后c没有后继结点,要回溯的,也就是说下一个遍历的是a的后继结点,f肯定是不对的.C中e有后继d,所以e后面应该是d

亚东县13744612596: 数据结构深度优先遍历: 设连通图G中的边集E={(a,b),(a,e),(a,c),(b,e),(e,d),(d,f),(f,c)},则从顶点a出发可以得到一种深度优先遍历的顶点序列为( ). -
潭山阿伐:[选项] A. abedfc B. acfebd C. aebdfc D. aedfcb

亚东县13744612596: 图的深度优先遍历序列什么唯一? -
潭山阿伐: 图的深度优先遍历序列不唯一的 .如下面这个图 深度优先遍历可以是ABEFCD ,也可以是ADCBFE. 假设给定图G的初态是所有顶点均未曾访问过.在G中任选一顶点v为初始出发点(源点),则深度优先遍历可定义如下:首先访问出发点v,...

亚东县13744612596: 图的深度优先遍历算法属于 - A.穷举法 B.回溯法 C.递归 D.分治法 -
潭山阿伐: 图的深度优先遍历算法属于_ A.穷举法 B.回溯法 C.递归 D.分治法B 回溯

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网