【算法图解】个人学习笔记4——DFS深度优先算法
定义
深度优先搜索算法(英语:Depth-First-Search,DFS)是一种用于遍历或搜索树或图的算法。这个算法会尽可能深的搜索树的分支。当节点v的所在边都己被探寻过,搜索将回溯到发现节点v的那条边的起始节点。这一过程一直进行到已发现从源节点可达的所有节点为止。如果还存在未被发现的节点,则选择其中一个作为源节点并重复以上过程,整个进程反复进行直到所有节点都被访问为止。这种算法不会根据图的结构等信息调整执行策略。
代码:
#深度优先算法
#参考 https://www.bilibili.com/video/BV1Ks411575U/?spm_id_from=333.788.recommend_more_video.0
graph={
"A":["B","C"],
"B":["A","C","D"],
"C":["A","B","D","E"],
"D":["B","C","E","F"],
"E":["C","D"],
"F":["D"]
}
def DFS(graph,s,mb): #mb为用户查找目标元素
#创建栈
stack=[]
#加入变量起点根s
stack.append(s)
# 邻居节点,判断是否重复遍历
seen=set()#创建一个集合
seen.add(s)#加入
relpace=0#记录所走步长
while stack:
# 添加一个节点,比如"A"为vertex
vertex=stack.pop()
# 栈后进先出,所以是pop()先出
# nodes为"A"的临近节点
nodes=graph[vertex]
#w为遍历nodes的集合
for w in nodes:
if w not in seen:
# 如果w不在seen中,w则加入集合和字典
stack.append(w)
seen. add(w)
# 当遍历到F
if vertex==mb:
break
print(vertex)
relpace +=1
if relpace>6:
print("不存在要遍历的玩意")
print("大O表示法查找时长为{}".format(relpace))
DFS(graph,"A","F")

