深度优先搜索?

时间:2012-06-17 19:32:29

标签: algorithm computer-science depth-first-search

  

前沿导致非子后代

  • 如果顶点通向另一个顶点,则根据定义,第二个顶点是第一个顶点的子节点。因此顶点如何导致非孩子?根据定义,顶点的子节点是由它引出的。
  

交叉边缘既不会导致祖先也不会导致后代

  • 如果顶点通向另一个顶点,则第二个顶点是第一个顶点的子节点。因此,如果根据定义,顶点导致的任何东西是它的孩子,那么交叉边缘如何导致非后代呢?​​

  • 如何选择来源? DFS算法如何知道哪里开始?

  • 边缘类型是否取决于算法的起始位置?例如,如果算法在顶点A处开始并且在顶点Z处结束,则从Z到A的边缘将是后边缘。如果算法在Z处开始并在A处结束,那么它将是前沿。我的推理是否正确?每次运行时边缘的类型是否会发生变化?

1 个答案:

答案 0 :(得分:2)

  

如果顶点通向另一个顶点,则根据定义,第二个顶点是第一个顶点的子节点。

没有;这里的“孩子”是指代表搜索空间的树,而不是“叠加”在其上以显示搜索顺序的图表。请参阅Wikipedia中的有用插图。

对于你的另一个问题也有类似的困惑。

选择来源以反映问题。它一直持续到您获得可接受的解决方案

假设您正试图了解如何从浴室到您的卧室。您的起始节点必须是浴室,然后是您实际丢失的地方。你在房子里闲逛,备份并尝试其他门,当你找到卧室(解决方案)时,你就停下来。有两个图:一个是搜索树;另一个是搜索顺序的线性路径。实际上是三,如果你包含问题空间本身。

问题空间,<>表示双向边缘(大多数人的房子的所有门都可以让人们接纳这两个方向):

            BATHROOM
              <> 
ENTRANCE <> HALLWAY  <>  DINING ROOM
              <>
            STAIRWAY <>  KIDS ROOM
              <>
            BEDROOM

搜索图 - 树(->表示母女关系;在树中,它们通常被视为单向)

Bathroom -> Hallway -> Entrance
                    -> Stairway -> Kids Room
                                -> Bedroom                            
                    -> Dining Room

搜索顺序 - 显示您如何遍历树的线性图。

Bathroom -> Hallway -> Entrance -> Stairway -> Kids Room -> Bedroom

在BFS中,给定相同的图形,它将是:

Bathroom -> Hallway -> Entrance -> Stairway -> Dining Room -> Kids Room -> Bedroom

起始节点由问题设定:“我在浴室里”。目标节点也由问题设定:“我想到卧室”。

另一个问题是:“我在奥赛罗的特定位置。(开始)我想赢。(目标)”

另请注意,如果我在走廊里丢失,我仍然可以使用DFS;您只需将图形转换为树,并将任何边缘修复为远离开头:

Hallway -> Entrance
        -> Dining Room
        -> Stairway -> Kids Room
                    -> Bedroom
        -> Bathroom