news 2026/8/6 7:15:41

算法Python题解——DFS和BFS

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
算法Python题解——DFS和BFS

目录

DFS

LEGB原则

760数的计算

BFS


DFS

把原问题分解成子问题的结构,天然适合用DFS实现

DFS的核心特点就是深度优先遍历所有,确保遍历每一种方式,枚举所有可能的生成路径

做DFS需要明确一下几个问题:

  • 递归出口是?
  • 深度是?
  • 作为每一次DFS的节点的变量是?

LEGB原则

要好好学一下LEGB原则,Python的变量与作用域

先局部Local→E外部→G全局global→B自带内部

  • 对于不可变变量(比如普通变量),如果赋值/修改操作,必须要声明global或nonlocal;如果不修改只取值,不需要加
  • 对于可变变量(比如列表,字典),修改值,赋值不需要加global
#LEGB原则 #嵌套作用域优先级 a = 10 def func1(): a = 20 print(a) def func2(): nonlocal a #如果想在嵌套函数内给外层函数的变量赋值,需要用nonlocal而非global a += 1 print(a)#如果没有上一句nonlocal,内层函数无定义,直接找外层的a = 20 func2() func1() #函数中对于读取和赋值作用域不同,读取全局变量√,赋值操作默认视为局部变量 ans = 0 n = 5 visit = [] def dfs(): global ans ans+=1#需要赋值/修改值,要加global print(ans) print(n)#仅读取不改动,不用global visit.append(1)#列表,字典属于可变对象,可以随便修改 #visit[n] = True #这条会报越界错,因为visit是空数组 visit[0] = True#不报错 dfs()

760数的计算

这题按照上面分析的几个问题

  • 递归出口是 x = 1,x//2+1 =1,range(1,1),没有可以添加的数,自动终止(正好这题不用写if 终止语句 return的模板)
  • 深度就是初始数n
  • 作为每一次DFS的节点的是每次递归的1/2个原数,也就是题解中的j(当时自己做的时候把j,i,n搞混了
import os import sys #全局变量 n = int(input()) visit = [] visit = [False] * (n + 1)#必须初始化不然越界 ans = 0 def dfs(depth,i): global ans#必须得有这句话 ans +=1 for j in range(1,i//2+1):#别忘了·终点都是不包含的 if visit[j] != True: visit[j] = True dfs(depth+1,j) visit[j] = False dfs(1, n) print(ans)

BFS

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/6 7:15:32

[拆解LangChain执行引擎]Agent状态是如何被写入通道的?

根据“梳理Agent的执行流程”中针对Pregel执行流程的介绍,我们知道在每个Superstep的最后阶段,引擎会根据节点针对通道的订阅以及“__pregel_tasks”这个通道存储的Send对象,确定下一步应该执行的节点,并为它们创建代表执行任务的…

作者头像 李华
网站建设 2026/8/6 7:14:46

实测对比后!千笔AI,开源免费降重首选

在AI技术迅速发展的今天,越来越多的学生和研究人员开始依赖AI工具辅助论文写作。然而,随着知网、维普、万方等查重系统不断升级算法,以及Turnitin对AIGC(人工智能生成内容)的识别愈发严格,AI率超标问题已成…

作者头像 李华
网站建设 2026/7/14 15:14:34

Linux自用

1.绝对路径、相对路径绝对路径:根目录为起点,加/开头相对路径:当前目录为起点2.特殊路径符(1)、.当前目录eg: pwd/home/ycd ./Desktoppwd/home/y/Desktop(2)、..上一级目录,cd ../.…

作者头像 李华
网站建设 2026/7/14 15:14:34

智慧铁路站台巡检数据集 火车站台安全监测 铁路人员图像识别 背包行李识别数据集 城市安防巡检 公共交通客流分析 便携物品自动识别第10571期

计算机视觉目标检测数据集 计算机视觉目标检测数据集数据集概览 本数据集为目标检测场景设计,聚焦日常场景中常见便携物品与交通工具的识别任务,为深度学习模型提供高质量标注图像数据。项目内容类别数量22类类别中文名称自行车、摩托车、背包、手提包、…

作者头像 李华