深度优先搜索

时间:2013-11-18 07:18:11

标签: graph complexity-theory depth-first-search

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

问题是要找到每个顶点的DFI,Level和Parent。

以下是它的图片:

enter image description here

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

2 个答案:

答案 0 :(得分:2)

所以你从'a'开始并且必须按字母顺序遍历节点,所以从你可以选择转到b或g所以你选择b因为它首先按字母顺序排列。从b你唯一的选择是g等等....

现在为你的价值观。 a的父级为null,因为您没有先前的节点,b的父级是a,而g的父级是b,依此类推。

dfs级别是它最终会在树上的级别。所以想象你进行遍历然后擦除所有不属于遍历的行。然后你扎根并'摇出'我的意思是你重新安排它,使它看起来像一棵树。 (这个特殊的图表非常无趣)然后根据该树分配级别。

dfs索引就是您触摸节点的顺序。

以下是您的图表,但使用g作为起点......我认为这会让它更有趣

enter image description here 数字是边缘的顺序。

Example of dfs starting at node g

这就是我所说的当我说'摇出'这就是你的树看起来像是什么,蓝色我显示每个节点的水平(基于0)。我希望这些图片让它更容易理解。

enter image description here

我绘制的那个(可怕的自由手一个)是通过删除所有未使用的边缘然后重新排列它们看起来像一棵树而形成的。

您可以将深度视为我必须从根目录获取到当前节点的步数。所以从g到b是1步,所以从g到i 3的深度为1,因为我们从g-> c-> d-> i 3步骤。在你完成遍历之后,你忽略了这样一个事实:你实际上可以通过两个步骤从g到i(g-> h-> i),因为它不是遍历的一部分

答案 1 :(得分:0)

索引只是访问节点的数字。 a是第一个,在那里写1。像你一样了解深度优先搜索,你应该知道第二个节点是什么;所以写下2。深度是节点的高度;每当你加深深度时,它就会增加,而且每当你变浅时,它就会减少。所以a位于深度1;下一个节点及其姐妹将在深度2等处。父母是标识您刚刚来自的节点的字母;因此a没有父级,而索引为2的节点将a作为父级。

如果您的班级使用从零开始的编号系统,请将上段中的2替换为1,将1替换为0。如果您不知道“零基础编号系统”是什么,请忽略此段。