5x5数字网格中的广度优先和深度优先搜索算法

时间:2012-03-09 20:34:08

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

我们应该在带有5x5数字网格的文本文件中读取并编写广度优先搜索深度优先搜索方法。

我不是要求任何人为我做功课,但我想帮助理解这些算法的理论。伪代码也不会受伤。

3 个答案:

答案 0 :(得分:2)

广度优先搜索实质上意味着:访问所有父节点,然后访问所有子节点。

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

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

enter image description here

您可以在此处获得深度优先搜索的相应图片:

enter image description here

的伪代码

广度优先搜索:

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

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

答案 1 :(得分:2)

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

    A
   / \
  B   C
 /
D

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

A B D C

C是B的兄弟,因此在搜索B的后代后进行搜索。

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

 A B C D   

B和C是兄弟姐妹,所以他们在B的孩子D之前被搜查。

答案 2 :(得分:0)

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

希望它有所帮助!