用python写DFS和BFS算法

2023-05-16

前言:

菜鸟学算法。加油!

一、什么是DFS和BFS?

1、BFS算法:

宽度优先搜索算法(又称广度优先搜索)是最简便的图的搜索算法之一,这一算法也是很多重要的图的算法的原型。Dijkstra单源最短路径算法和Prim最小生成树算法都采用了和宽度优先搜索类似的思想。其别名又叫BFS,属于一种盲目搜寻法,目的是系统地展开并检查图中的所有节点,以找寻结果。

 

2、DFS算法:

事实上,深度优先搜索属于图算法的一种,英文缩写为DFS即Depth First Search.其过程简要来说是对每一个可能的分支路径深入到不能再深入为止,而且每个节点只能访问一次.

深度优先遍历图的方法是,从图中某顶点v出发:

(1)访问顶点v;

(2)依次从v的未被访问的邻接点出发,对图进行深度优先遍历;直至图中和v有路径相通的顶点都被访问;

(3)若此时图中尚有顶点未被访问,则从一个未被访问的顶点出发,重新进行深度优先遍历,直到图中所有顶点均被访问过为止。


二、用python实现BFS以及DFS算法:

1、BFS:

graph={
    'A':['B','C'],
    'B':['A','C','D'],
    'C':['A','B','D','E'] ,
    'D':['B','C','E','F'],
    'E':['C','D'],
    'F':['D']
    }

def BFS(graph,s):  #s表示开始结点,广度优先算法依靠队列
    queue=[]#python数组中可以动态添加和删除东西
            #queue.append('A'),A加入数组,queue.pop('A'),A退出数组。
    queue.append(s)#开始结点入队
    seen=[]
    seen.append(s)
    while (len(queue)>0):
        vertex=queue.pop(0)
        nodes=graph[vertex]
        for w in nodes:
           if w not in seen:
               queue.append(w)
               seen.append(w)
        print(vertex)

BFS(graph,'A')
            

 2、DFS

基本用法练习;

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):
     stack=[] #栈
     stack.append(s)
     seen=set()
     seen.add(s)
     while (len(stack)>0):
         vertex=stack.pop()
         nodes=graph[vertex]
         for w in nodes:
             if w not in seen:
                 stack.append(w)
                 seen.add(w)
         print(vertex)

DFS(graph,'A')#起点任选

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

用python写DFS和BFS算法 的相关文章

  • 检测骰子的上侧

    是否可以检测骰子的上面 虽然从顶部看这将是一项简单的任务 但从许多角度来看 可以看到多个侧面 Here is an example of a dice feel free to take your own pictures 您通常想知道自己
  • Python 3.6 DateTime Strptime 返回错误,而 Python 3.7 运行良好

    我刚刚为日期数据创建了一个数据类型 它返回一个datetime datetime object 这是代码 import datetime class Date def new cls dateTime args kwargs return
  • 漂亮的地图打印机会抛出类型错误

    我已经使用配置了漂亮的打印机http wiki eclipse org CDT User FAQ How can I inspect the contents of STL containers 3F http wiki eclipse o
  • Python 函数句柄 ala Matlab

    在 MATLAB 中可以创建function handles http www mathworks co uk help techdoc ref function handle html与类似的东西 myfun arglist body 这
  • 在Python中不断寻找用户输入

    我将如何编写一个始终寻找用户输入的 Python 程序 我想我希望有一个等于输入的变量 然后根据该变量的等于值会发生不同的情况 因此 如果变量是 w 那么它将执行某个命令并继续执行 直到收到另一个输入 例如 d 然后会发生不同的情况 但直到
  • 如何使用 .pth 文件添加 Python 导入路径

    如果我将 pth 文件放入 site packages 中 则会给出一个ImportError 我不知道如何通过创建 pth 文件来导入 指在Python中导入 https stackoverflow com questions 69728
  • Visual Studio Code:如何使用参数调试 Python 脚本

    我正在使用 Visual Studio Code 来调试 Python 脚本 下列的本指南 https code visualstudio com docs python debugging 我在中设置了参数launch json file
  • Colab 的使用限制持续多久?

    当我对同一帐户的两个笔记本同时使用两个 GPU 约半小时后 Colab 已 12 小时未运行 此消息不断弹出 由于 Colab 中的使用限制 您当前无法连接到 GPU 自从我上次使用 colab 以来已经过去了大约两个小时 但该消息仍然弹出
  • 如何在seaborn中绘制离散变量的分布图

    当我画画的时候displot对于离散变量 分布可能不像我想象的那样 例如 We can find that there are crevices in the barplot so that the curve in kdeplot is
  • 将相同的 Patch 实例添加到 matplotlib 中的多个子图中

    我正在尝试将补丁的相同实例添加到 matplotlib 中的多个轴 这是最小的例子 import matplotlib pyplot as mpl plt import matplotlib patches as mpl patches f
  • 如何解决CDK CLI版本不匹配的问题

    我收到以下错误 此 CDK CLI 与您的应用程序使用的 CDK 库不兼容 请将CLI升级到最新版本 云程序集架构版本不匹配 支持的最大架构版本为 8 0 0 但发现为 9 0 0 发出后cdk diff命令 我确实跑了npm instal
  • Python 在 64 位 vista 上获取 os.environ["ProgramFiles"] 的错误值

    Vista64 计算机上的 Python 2 4 3 环境中有以下2个变量 ProgramFiles C Program Files ProgramFiles x86 C Program Files x86 但是当我运行以下命令时 impo
  • 多个列表和大小的所有可能排列

    在 python 中使用以下命令很容易计算简单的排列itertools permutations https docs python org 3 library itertools html itertools permutations 你
  • python lxml 使用iterparse编辑并输出xml

    我已经在 lxml 库上摆弄了一段时间了 也许我没有正确理解它 或者我错过了一些东西 但我似乎无法弄清楚在捕获某个 xpath 后如何编辑文件并且然后能够在逐个元素解析时将其写回到 xml 中 假设我们有这个 xml 作为示例
  • 在 Python 中将嵌套字典位置作为参数传递

    如果我有一个嵌套字典 我可以通过索引来获取键 如下所示 gt gt gt d a b c gt gt gt d a b c 我可以将该索引作为函数参数传递吗 def get nested value d path a b return d
  • 使用 conda 安装额外功能

    With pip我们可以使用方括号安装子包 例如与阿帕奇气流 https pythonhosted org airflow installation html pip install airflow all 有类似的东西吗conda或者我必
  • 获取 python 模块的 2 个独立实例

    我正在与以非 OO 方式编写的 python 2 x API 进行交互 它使用模块全局范围来处理一些内部状态驱动的东西 在它不再是单例的情况下需要它 并且修改原始代码 不是我们的 不是一个选择 如果不使用单独解释器的子进程运行 有什么方法可
  • datetime strftime 不输出正确的时间戳

    下列 gt gt gt from dateutil parser import parse gt gt gt parse 2013 07 02 00 00 00 0000 datetime datetime 2013 7 2 0 0 tzi
  • 跟踪白色背景中的白球(Python/OpenCV)

    我在 Python 3 中使用 OpenCV 来检测白场上的白 黑球 并给出它的精确 x y 半径 和颜色 我使用函数 cv2 Canny 和 cv2 findContours 来找到它 但问题是 cv2 Canny 并不总是检测到圆的完整
  • Pandas 2 个字段中唯一值的数量

    我正在尝试查找覆盖 2 个字段的唯一值的数量 例如 一个典型的例子是姓氏和名字 我有一个数据框 当我执行以下操作时 我只获取每列的唯一字段数 在本例中为 最后一个 和 第一个 不是复合体 df Last Name First Name nu

随机推荐

  • 无法连接 MKS: Login(username/password)incorrect

    升级到Vmware Workstation 12之后 xff0c 客户端能连上虚拟机服务器 xff0c 但却打不开共享的虚拟机 xff0c 提示报错 无法连接 MKS Login username password incorrect 查了
  • 李永乐(一)行列式计算——笔记

    行列式基本性质 一 行列式求值 说明 xff1a 第 i 行元素 乘 第 j 列的代数余子式 之和 61 0 二 转置行列式值不变 引申 xff1a 行有什么性质 xff0c 列就有什么性质 三 两行互换 xff0c 行列式值变号 引申 x
  • 计算机网络——组播地址(多播地址、D类地址)详解——不断完善更新中

    1 是什么 先看这张图 xff0c 组播地址是分类编址的IPv4地址中的D类地址 xff0c 又叫多播地址 xff0c 他的前四位必须是1110 xff0c 所以网络地址的取值范围是224 239 2 这些IP地址用来做什么 224 0 0
  • 线代——猴博士笔记

    求向量组的秩 xff0c 先求极大无关组 xff0c 极大无关组里几个向量 xff0c 秩就是几 什么是极大无关组 xff1f 从一向量组挑出几个向量 xff0c 他们线性无关 xff0c 且原来向量组中任意一个向量加进去 xff0c 又变
  • C++ std::ref————详解

    想学习ref xff0c 必须先学习reference rapper 1 是什么 xff1f ref是个函数模板 xff1a 用来构建一个reference wrapper对象并返回 xff0c 该对象拥有传入的elem变量的引用 如果参数
  • I/O复用的高级应用:聊天室程序———实例代码

    1概述 这是一个聊天室程序 xff0c 分为服务端和客户端两部分 多个客户端可以连接到同一个服务器 xff0c 当一个客户端向服务器发送消息时 xff0c 该消息会被转发给除发送端外的其他客户端 xff0c 其他客户端收到该消息并输出到标准
  • CMake指令解析 set(CMAKE_CXX_FLAGS “$ENV{CXXFLAGS} -rdynamic -O3 -fPIC -ggdb -std=c++11 -Wall -Wno-deprec

    完整代码 set span class token punctuation span CMAKE CXX FLAGS span class token string 34 span class token variable ENV span
  • vscode找不到头文件报错,就离谱

    最近在vscode写一个项目 xff0c 进行编译测试的时候发现死活找不到头文件 xff0c 就离谱 xff0c CMakeLists txt里的include directories所有头文件包含路径写的明明白白清清楚楚 xff0c 就是
  • 有26个字母a~z,找出所有字母组合,a、b、c、ab、abc、a~z 都是一个组合(顺序无关)

    mark 一下 xff0c 好像是用深搜做的 xff0c 目前看不太懂 span class token keyword int span list span class token punctuation span span class
  • 对顶堆模板:求动态数组的中位数

    模板 priority queue span class token operator lt span span class token keyword int span span class token operator gt span
  • C++八股文

    文章目录 C 43 43 语言int function int a int b 指针数组和数组指针的区别 xff1f 数组指针指针数组 函数指针和指针函数的区别函数指针指针函数 常量指针和指针常量的区别数组和指针的区别指针和引用的区别数组名
  • 一个HTML网页简单有效的验证码更换方法

    代码展示 lt img name 61 34 verifycode 34 src 61 34 verifyServlet 34 height 61 34 40px 34 width 61 34 150px 34 onclick 61 34
  • 获取CSDN文章内容并转换为markdown文本的python

    这篇文章主要介绍了自己写的小工具 xff0c 可以直接获取csdn文章并转换为markdown格式 需要的朋友可以参考下 自己写的小工具 xff0c 可以直接获取csdn文章并转换为markdown格式 效果图 核心代码 span clas
  • Android-视图绑定

    举例 xff1a 此时 xff0c first layout xml中定义了一个button且id为button1的按钮 在FirstActivity中我们想要调用这个按钮的话 xff0c 有两种方法 第一种 xff0c 通过FindVie
  • C语言程序设计1

    C语言程序设计1 计算机语言分类 xff1a 机器语言 xff1a xff08 machine language xff09 计算机直接使用的二进制形式的程序语言或机器代码 汇编语言 xff1a 借助助记符进行描述的计算机语言 高级语言 x
  • ZYNQ中的GPIO与AXI GPIO

    GPIO GPIO 一种外设 xff0c 对器件进行观测和控制MIO 将来自PS外设和静态存储器接口的访问多路复用到PS引脚上处理器控制外设的方法 通过一组寄存器包括状态寄存器和控制寄存器 xff0c 这些寄存器都是有地址的 xff0c 通
  • FTP文件传输协议

    简介 FTP协议 xff1a 文件传输协议 xff08 File Transfer Protocol xff09 协议定义了一个在远程计算机系统和本地计算机系统之间传输文件的一个标准FTP运行在OSI模型的应用层 xff0c 并利用传输协议
  • python中如何用for循环语句1加到100?

    计算机是现代一种用于高速计算的电子计算机器 xff0c 是一种高级的计算工具 可以进行数值计算 xff0c 又可以进行逻辑计算 xff0c 还具有存储记忆功能 是能够按照程序运行 xff0c 自动 高速处理海量数据的现代化智能电子设备 计算
  • controller层配置全局配置拦截器

    大家好 xff0c 我是一名在算法之路上不断前进的小小程序猿 xff01 体会算法之美 xff0c 领悟算法的智慧 希望各位博友走过路过可以给我点个免费的赞 xff0c 你们的支持是我不断前进的动力 xff01 xff01 加油吧 xff0
  • 用python写DFS和BFS算法

    前言 xff1a 菜鸟学算法 加油 xff01 一 什么是DFS和BFS xff1f 1 BFS算法 xff1a 宽度优先搜索算法 xff08 又称广度优先搜索 xff09 是最简便的图的搜索算法之一 xff0c 这一算法也是很多重要的图的