直接进入主题,关于深度优先搜索,发源于数据结构图,起初是用来进行图的遍历,经过科研人员长时间的研究和总结,已经运用到实际的生产生活中去,用以解决需要大量重复、排列组合的相关问题。
参考书目:
《算法导论》、《啊哈!算法》、《数据结构(李建忠翻译版)》。
关于基本数据结构图的相关内容,用于本算法中的内容,主要是关于伪代码中的一些解释:
1.首先理解邻接链表:对于无向图而言,G的邻接链表表示千万不能理解为方向。这幅图仅仅表示这个结点与其他哪几个结点相连接。只有对于有向图,才是有确定方向的。
无向图
有向图
2.关于Adj[u]:就是与u相邻接结点的集合。就是在这个集合内的点,与u都有线相连;
3.u.d 和 u.f 两个时间戳,本文暂时不讨论;
下面给出伪代码,再来分析:
DFS(G)
for each vertex u ∈ G.V
u.code = WHITE
u.π = nul
time = 0
for each vertex u ∈ G.V
if u.color == WHITE
DFS-VISIT(G,u)
DFS-VISIT(G,u)
time = time + 1
u.d = time
u.color = GRAY
for each v ∈ G:Adj[u]
if v.color == WHITE
v.π = u
DFS-VISIT(G,u)
u.color = BLACK
time = time + 1
u.f = time
这是原版的伪代码,来自《算法导论》,按照书上的说法,这就是最基本的深度优先算法。输入图可以是有向图,也可以是无向图。