我们应该在带有5x5数字网格的文本文件中读取并编写广度优先搜索和深度优先搜索方法。
我不是要求任何人为我做功课,但我想帮助理解这些算法的理论。伪代码也不会受伤。
答案 0 :(得分:2)
广度优先搜索实质上意味着:访问所有父节点,然后访问所有子节点。
虽然深度优先搜索意味着:首先访问所有子节点,直到到达叶节点(没有子节点的节点),然后访问下一个父节点和所有子节点并继续,直到你访问了所有节点。
这里有图片(取自维基百科),显示了在广度优先搜索中访问节点的顺序(由树表示):
您可以在此处获得深度优先搜索的相应图片:
的伪代码
广度优先搜索:
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
希望它有所帮助!