【问题标题】:Breadth-first and depth-first search algorithms in a 5x5 grid of numbers5x5 数字网格中的广度优先和深度优先搜索算法
【发布时间】:2012-03-09 20:34:08
【问题描述】:

我们应该读入一个包含 5x5 数字网格的文本文件,并编写一个广度优先搜索和一个深度优先搜索方法。 p>

我不是要求任何人为我做功课,但我希望在理解这些算法的理论方面得到一些帮助。伪代码也不会受到伤害。

【问题讨论】:

  • 第一:获得一些信心!我敢肯定你并不是真的没用。第二:这是一个更适合谷歌的问题。 StackOverflow 问题应与您尝试解决的特定编程问题有关。
  • 做一些研究,然后如果您有更具体的问题回来。
  • 你不是没用的!我编辑了这个问题。
  • 一百万英里的旅程始于一步。

标签: java graph depth-first-search breadth-first-search


【解决方案1】:

广度优先搜索本质上是:先访问所有父节点,再访问所​​有子节点。

深度优先搜索的意思是:首先访问所有子节点,直到到达一个叶节点(没有子节点的节点),然后访问下一个父节点和所有子节点并继续,直到您访问了所有节点。

这里有图片(取自维基百科),显示了在广度优先搜索中访问节点的顺序(用树表示):

这里有深度优先搜索的对应图片:

伪代码

广度优先搜索:

def BFS(G,v):

    create a queue Q
    enqueue v onto Q
    mark v

    while Q is not empty:
      t = Q.dequeue()

      if t is what we are looking for:
          return t

      for all edges e in G.incidentEdges(t) do:
         o = G.opposite(t, e)

     if o is not marked:
          mark o
          enqueue o onto Q

本质上,您正在创建一个队列并在其中添加所有节点... 记住队列是先进先出数据结构。

深度优先搜索:

def DFS(G, v):
    label v as explored

    for all edges e in G.incidentEdges(v) do:

      if edge e is unexplored then:

          w = G.opposite(v, e)

          if vertex w is unexplored then:

              label e as a discovery edge
              recursively call DFS(G, w)
      else 
         label e as a back edge

现在,对于这个,您几乎设置了一个探索标志,如果您已经探索了所有这些标志,那么您已经按顺序进行了深度优先搜索。

【讨论】:

  • 这个答案很糟糕。伪代码令人困惑,您对它的解释远非很好。此外,在我看来,算法的初步解释并不好。
【解决方案2】:

深度和广度优先搜索在树的上下文中可能更容易理解。

    A
   / \
  B   C
 /
D

深度优先搜索 (DFS) 将在访问兄弟节点之前访问子节点。对上述树的部门优先搜索将按以下顺序访问项目:

A B D C

C 是 B 的兄弟,所以在搜索 B 的后代之后进行搜索。

广度优先搜索 (BFS) 在访问子节点之前搜索兄弟节点。上述树的广度优先搜索将按以下顺序访问项目:

 A B C D   

B 和 C 是兄弟姐妹,因此在 B 的孩子 D 之前搜索它们。

【讨论】:

  • 这很好,但我还想在原始图中看到一个示例。可以提供一下吗?
  • 忘了我什至写了这个问题。回到它,我很想知道原始图表的例子是什么。如果有人看到这一点,那么实现是否真的与树的 DFS 不同?
【解决方案3】:

查看我在 BFS 和 DFS 上的帖子 http://nekocm.blogspot.com/search/label/Data%20Structures

希望对你有帮助!

【讨论】:

    猜你喜欢
    • 2011-01-31
    • 1970-01-01
    • 2016-02-16
    • 1970-01-01
    • 1970-01-01
    • 2014-06-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多