深度优先算法

简介: 深度优先算法

概要

来看下图的另外一个应用,深度优先算法。

深度优先,听名字就知道,一条道走到黑;然后回溯到之前的起始点,遍历下一个节点,循环。

这是我理解的,其中用到了回溯的思想,遍历节点。

例子

有个走迷宫的例子。这个就是用的深度优先。一个路口走到头,不能再往里走了,也就是没路了,然后回答起始位置,重新往下个节点,一直走到没路位置。

我觉得有点暴力的思想,遍历所有节点,一直往下,如果有路,总能找到;没路,就是走到最后也没路可走,回来了又。遍历完所有节点,结束。

看下代码,下边。

代码Python

递归写法代码模板。

递归

visited = set() 
def dfs(node, visited):
  if node in visited: # terminator
    # already visited   
    return 
    visited.add(node) 
  
    # process current node here. 
    ...
    for next_node in node.children(): 
      if next_node not in visited: 
      dfs(next_node, visited)

非递归

非递归写法

def DFS(self, tree):  
  if tree.root is None:     
    return []   
  visited, stack = [], [tree.root]  
  while stack:    
    node = stack.pop()    
    visited.add(node)   
    process (node)    
    nodes = generate_related_nodes(node)    
    stack.push(nodes) 

小结

深度优先,图的应用

深度优先,很有趣的算法;代码也很经典,都值得学习。我记得最开始学的时候,给我的印象就是一条路走到黑,然后再走下一个节点。循环。跟广度优先不一样,先遍历跟它接触的所有节点,然后下一个,下一个。也挺好理解的。其实这么看。都是挺有趣的算法,还有快慢指针等等。

相关文章
|
6月前
|
监控 算法 机器人
软件体系结构 - 调度算法(2) 最低松弛度优先
【4月更文挑战第19天】软件体系结构 - 调度算法(2) 最低松弛度优先
182 0
|
6月前
|
存储 人工智能 算法
图与树的遍历:探索广度优先、深度优先及其他遍历算法的原理与实现
图与树的遍历:探索广度优先、深度优先及其他遍历算法的原理与实现
398 0
|
6月前
|
监控 算法 自动驾驶
软件体系结构 - 调度算法(1) 最早截至时间优先
【4月更文挑战第19天】软件体系结构 - 调度算法(1) 最早截至时间优先
331 0
|
2月前
|
算法 调度
作业调度算法_先来先服务算法_短作业优先算法_高响应比优先算法
本文介绍了作业调度算法,包括先来先服务(FCFS)、短进程优先(SJF)和高响应比优先(HRRN)算法。通过分析进程的到达时间和所需CPU服务时间,计算进程的开始时间、完成时间、平均周转时间和平均带权周转时间,以评估不同算法的性能。FCFS适合长作业,SJF适合短作业,而HRRN则综合了两者的优点。
83 12
|
4月前
|
算法 JavaScript
JS 【详解】树的遍历(含深度优先遍历和广度优先遍历的算法实现)
JS 【详解】树的遍历(含深度优先遍历和广度优先遍历的算法实现)
67 0
JS 【详解】树的遍历(含深度优先遍历和广度优先遍历的算法实现)
|
5月前
|
算法 Python
广度优先算法
广度优先算法
|
5月前
|
算法
【经典LeetCode算法题目专栏分类】【第4期】BFS广度优先算法:单词接龙、最小基因变化、二进制矩阵中的最短路径
【经典LeetCode算法题目专栏分类】【第4期】BFS广度优先算法:单词接龙、最小基因变化、二进制矩阵中的最短路径
|
算法 Go C++
【LeetCode 算法专题突破】二叉树的深度优先遍历(⭐)
【LeetCode 算法专题突破】二叉树的深度优先遍历(⭐)
65 0
|
6月前
|
存储 算法
图的深度优先算法
图的深度优先算法
40 0