首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >深度优先搜索

深度优先搜索
EN

Stack Overflow用户
提问于 2013-11-18 15:18:11
回答 2查看 2.1K关注 0票数 0

在从顶点a开始的图上执行深度优先搜索。当你遍历邻居时,按字母顺序处理它们。

问题是找到每个顶点的DFI,Level和父级。

这是它的一张图片:

我不确定如何继续,这是一个即将到来的考试的练习题。我知道对于深度优先搜索,它使用一个堆栈,它将从顶点a开始,并在堆栈中按字母顺序排列,但我不确定如何获得每一列的值。有没有人能进一步解释或帮助我?

EN

回答 2

Stack Overflow用户

发布于 2013-11-18 15:34:10

所以你从'a‘开始,必须按字母顺序遍历节点,所以从a开始,你可以选择转到b或g,所以你选择b,因为它是按字母顺序排列的第一个。从b开始,你唯一的选择是g,以此类推。

现在来看看你的价值观。A的父节点为空,因为之前没有节点,所以b的父节点是a,g的父节点是b,依此类推。

dfs级别是它最终会出现在树上的级别。所以想象一下,你进行了遍历,然后删除了所有不属于遍历的行。然后你把你的根“摇出来”,我的意思是你重新排列它,让它看起来像一棵树。(这个特定的图表非常无趣),然后您可以根据该树分配级别。

dfs索引只是您接触节点的顺序。

下面的是你的图表,但使用g作为起点……我认为这会让它更有趣一些。

这些数字是获取边的顺序。

这就是我所说的“摇出来”,这是你的树的样子,蓝色的我显示了每个节点的级别(从0开始)。我希望图片能让它变得更容易理解。

我画的那个(可怕的徒手画)是通过删除所有不使用的边,然后重新排列它们,使它们看起来像一棵树形成的。

你可以把深度想象成我从根到当前节点需要走多少步。所以从g到b是1步,所以从g到i的深度是1,因为我们从g->c->d->i ->3步开始。在完成遍历之后,您忽略了一个事实,即您实际上可以通过两个步骤(g->h->i)获得从g到i的结果,因为这不是遍历的一部分

票数 2
EN

Stack Overflow用户

发布于 2013-11-18 15:22:47

索引仅仅是访问节点的顺序的编号。a是第一个,在那里写1。像你这样知道深度优先搜索,你应该知道第二个节点是什么;所以在它下面写2。深度是节点的高度;每加深一次,它就增加一次,每当你变浅的时候,它就减少一次。因此a位于深度1;下一个节点及其姊妹节点将位于深度2上,依此类推。父节点是标识您刚来自的节点的字母;因此a没有父节点,具有索引2的节点将具有a作为父节点。

如果您的类使用从零开始的编号系统,请将上面段落中的2替换为1,并将1替换为0。如果你不知道什么是“基于零的编号系统”,忽略这一段。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20042176

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档