DFS(深度优先遍历) & BFS:(广度优先遍历)

数据结构与算法(7-2)图的遍历(深度优先遍历DFS、广度优先遍历BFS)(分别用邻接矩阵和邻接表实现) 一、深度优先遍历(DFS) 阅读详情

 

DFS (Deep First Search)

概念:

    顾名思义,这种遍历方法是以深度为优先进行对图的搜索或者遍历,至于什么是以深度为优先条件,先看下面DFS的基本步骤:

   ( 这是一个递归思想的DFS)

    DFS:从当前节点开始,先标记当前节点,再寻找与当前节点相邻,且未标记过的节点:

        (1): 当前节点不存在下一个节点,则返回前一个节点进行DFS

        (2): 当前节点存在下一个节点,则从下一个节点进行DFS

   下面是图解:

    一开始,可以看出,若没有走到死路,这种遍历方式会从start节点沿着一条路一直深入下去(start -> 1 -> 2 -> 3。

   

    若走到死路,便会退回上一节点,遍历上一节点的其他相邻节点(2 -> 4)。

     

    这样一直重复,直到找到终点。

     

    所以跟你所见到的一样,这样的搜索方法像一根贪婪的蚯蚓,喜欢往深的地方钻,所以就自然而然的叫做深度优先算法了。其用途也是非常多的,我觉得最直观的用法之一是用来寻找迷宫的出口 。

   我们可以顺势写出DFS的伪代码:

        find(节点){

            if(此结点已经遍历 || 此节点在图外 || 节点不满足要求) return;

            if(找到了end节点) 输出结果 ; return;

            标记此节点,表示已经遍历过了;

            while(存在下一个相邻节点) find(下一个节点);

        }

 

BFS (Breadth First Search)

概念:

    对于深度优先算法,强迫症就很不爽了,并表示:“为什么不干干净净,一层一层地从start节点搜索下去呢,就像病毒感染一样,这样才像正常的搜索的样子嘛。”于是便有了BFS算法(误)。广度优先算法便如其名字,它是以广度为优先的,一层一层搜索下去的,就像病毒感染,扩散性的传播下去。

    图解:

    下图中,start为搜索的初始节点,end为目标节点

                       

   我们先把star节点的关联节点遍历一次

                       

    接下来把第一步遍历过的节点当成start,重复第一步

                      

    重复一二步,这样便是一个放射样式的搜哦防范,直到找到end节点

                      

    可以看出,这样放射性的寻找方式,能找到从start到end的最近路(因为每次只走一步,且把所有的可能都走了,谁先到end说

    明这就是最短路)。但这样如何用代码实现?用栈貌似不行,改变递归的顺序也不行。

    这里需要用到队列:

    a.比如每遍历start周围的一个“1”节点的时候,就把跟它相关联的“2”节点保存到队列中(“1”节点访问完之后队列内容:2,2,2,2)

    b.然后依次访问队列内容,并对每个队列元素重复a步骤(访问一个“2”节点之后队列的内容:2,2,2,3,3)。

    c.由此重复下去,直到队列为空或者搜索到终点。

    广度优先的[递归]伪代码如下:

        把start节点push入队列;

        while(队列不为空) {

            把队列首节点pop出队列;

            对节点进行相关处理或者判断;

            while(此节点有下一个相关节点){

                把相关节点push入对列;

            }

        }

    应用例题:Abbott的复仇(Abbott's Revenge, ACM/ICPC World Finals 2000, UVa 816)

 

 

从LLaMA到LLaMA-MoE:轻量级混合专家模型构建与实战指南 混合专家(Mixture-of-Experts, MoE)是一种先进的神经网络架构,其核心原理是通过门控网络动态地为不同输入选择不同的专家子网络进行计算,从而实现模型容量的指数级扩展,同时保持推理时的计算量基本不变。这种稀疏激活的特性赋予了MoE极高的技术价值,使其成为解决大模型训练与推理成本矛盾的关键技术之一,在自然语言处理、多模态学习等场景中展现出巨大潜力。本文聚焦于**LLaMA-MoE**这一具体实践,深入探讨了如何基于成熟的稠密模型(如LLaMA),通过**专家构建**与**持续预训练**两大关键 阅读详情

相关推荐

同济大学824复试全攻略:从笔试到面试的实战解析

本文详细解析同济大学824复试全流程,包括专业课笔试、外语听力与口语、专业外语笔试和专业综合面试的备考策略。重点分享数字信号处理、计算机网络等专业课的高效学习方法,以及专业外语速成和口语面试技巧,助力考生全面提升复试表现。

qq_27496129的博客 1054

深度优先搜索(Depth-First Search)

一、深度优先搜索概念: 它从某个状态开始,不断地转移状态直到无法转移,然后回退到前一步的状态,继续转移到其他状态,如此不断重复,直至找到最终的解 二、关于DFS: (1)对于DFS,一般采用递归方式,隐式地利用栈进行计算。 (2)深搜(DFS)耗费空间比广搜(BFS)小,因为深搜(DFS)是一种深度的搜索,复杂度与空间深度成正比;而广搜(BFS)是通过遍历每个状态进行搜索,复杂度与状态数有...

匿名攻城狮 2024

hive sql每个用户的累积访问次数

我们有如下的用户访问数据 userId visitDate visitCount u01 2017/1/21 5 u02 2017/1/23 6 u03 2017/1/22 8 u04 2017/1/20 3 u01 2017/1/23 6 u01 2017/2/21 8 U02 2017/1/23 6 U01 2017/2/22 4 要求使用SQL...

weixin_39150719的博客 3480

Python实现深度优先遍历(DFS)和广度优先遍历(BFS)

一,简介 深度优先遍历(Depth First Search, 简称 DFS) 与广度优先遍历(Breath First Search)是图论中两种非常重要的算法,生产上广泛用于拓扑排序,寻路(走迷宫),搜索引擎,爬虫等,也频繁出现在 leetcode,高频面试题中。 二,深度优先遍历 主要思路是从图中一个未访问的顶点 V 开始,沿着一条路一直走到底,然后从这条路尽头的节点回退到上一个节点,再从另一条路开始走到底…,不断递归重复此过程,直到所有的顶点都遍历完成,它的特点是不撞南墙不回头,先走完一条路,再换一

西门一刀的博客 1万+

别再只仿真原理图了!用ADS做微带功分器,版图仿真这一步才是关键

本文深入探讨了使用ADS进行微带功分器设计时版图仿真的重要性,指出原理图仿真与版图仿真的本质差异及其对性能的影响。通过详细分析版图效应、关键设置和优化策略,帮助工程师避免常见陷阱,提升设计效率和准确性。文章特别强调了版图仿真在确保微波电路性能中的关键作用。

weixin_42561476的博客 412

西门子博途系列学习笔记SCL(三)______自由口通讯(RS485轮询程序)

西门子博途V16系列学习笔记SCL(三)___自由口通讯轮询程序(RS485) 西门子博途系列学习笔记SCL(三)______自由口通讯(RS485轮询程序) 文章目录西门子博途V16系列学习笔记SCL(三)___自由口通讯轮询程序(RS485)前言一、FreePort自由口通讯是什么?二、使用步骤1.模块参数定义2.定义FB功能块参数:3.程序代码如下(每天写代码100行,学不会你来找我):总结 前言 很长时间都没有更新了,主要是最近在学习罗克韦尔的STUDIO5000PLC编程软件,怎么说,和博

weixin_42940283的博客 1万+

DFS(深度优先遍历)

DFS的意思为深度优先遍历。 一、DFS的简介: 深度优先遍历(DFS)也叫深度优先搜索。它的定义是:不断地沿着顶点的深度方向遍历。顶点的深度方向是指它的邻接点方向。 二、DFS的实现步骤: 1、从顶点出发。 2、访问顶点,也就是根节点。 3、依次从顶点的未被访问的邻接点出发,进行深度优先遍历;直至和顶点有路径相通的顶点都被访问。 4、若此时尚有顶点未被访问,则从一个未被访问的顶点出发,重新进行深度优遍历,直到所有顶点均被访问过为止。 此次我以《算法竞赛入门经典第2版》6.4.1中的例题6-12《油田.

weixin_53154605的博客 5619

07. 基础实战篇 - STP的基本配置

STP(生成数协议)是一个用于在局域网中消除环路的协议,他的标准是IEEE802.1d。STP通过强制使部分冗余链路处于阻塞状态,其它链路处于转发状态,将环形网络结构修剪成无环路的树形网络结构。可实现消除环路,当处于转发状态的链路不可用时,STP重新配置网络,并激活合适的备用链路状态,恢复网络连通性。

weixin_39868387的博客 7224

DFS(Deep First Search)深度优先搜索 & BFS(Breath First Search)广度优先搜索。

C/C++Linux服务器开发/后台架构师知识体系整理 DFS(Deep First Search)深度优先搜索。 BFS(Breath First Search)广度优先搜索。 今天想说一说个人对于这两个搜索方法的见解。在我看来,DFS与BFS是算法道路上最基础最容易掌握的,同时,又能提供巨大助力的方法之一。我这里斗胆用方法二字来形容DFS以及BFS,用搜索思想来囊括二者。方法是死的,而思想是活的,我们应该通过对这两种方法的剖析来获得这种思想,因为无论是在现实问题还是算法题目上,问题模型都是多变的,我们要

C/C++Linux、音视频、DPDK 930

EB TRESOS 29.0.0安装教程用于MCAL配置开发

本文介绍的搭建基于NXP官网提供EB软件,进行基于标准AUTOSAR软件底层驱动配置的开发

qq_53260940的博客 1876

YOLOv11 结合多尺度卷积注意力机制(MSCA):小目标检测精度提升20%的完整实现指南

用不同尺寸的深度卷积(如d×7×1、d×1×7等)提取多尺度特征;通过通道融合,强化小目标的细节信息;仅增加4.2M参数,却能让小目标检测精度大幅提升(对比表见后文)。

m0_71589036的博客 185

深度优先搜索-DFS

英文全称:Deep First Search枚举所有完整路径来遍历所有情况的搜索方法return不同情况的介绍。

2301_76371717的博客 482

晶闸管选型参数,结构原理,工艺与注意问题总结

闸管(Thyristor)是一种半导体开关器件,也被称为可控硅整流器(SCR, Silicon Controlled Rectifier)。它可以在高电压和大电流条件下工作,常被用于交流电的控制和整流。本文对晶闸管的工作原理,结构特点,工艺流程,选型参数及设计注意事项进行总结。

fydar的博客 1282

数据结构21————图的深度优先遍历(DFS)&广度优先遍历(BFS)

数据结构18————图的深度优先遍历(DFS)&广度优先遍历(BFS) DFS定义 遍历思路 伪代码 对邻接矩阵存储无向图的进行DFS 对邻接表存储的无向图进行DFS

冰炭不投day的博客 4047

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

二叉树广度优先遍历(BFS) & 深度优先遍历(DFS)

二叉树的遍历    树的遍历是一种重要的运算。所谓遍历是指对树中所有节点信息的访问,即一次对树中每个接地访问一次且仅访问一次,将这种对所有节点的访问称为遍历(travelsal)。 树的两种重要遍历模式是深度优先遍历(DFS)和广度优先遍历(BFS),BFS 一般用遍历,DFS一般用队列。一般情况下能用递归实现的算法大部分也可以用堆栈实现。 广度优先遍历(层次遍历) ...

qq_41930096的博客 312

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

广度优先遍历(bfs)和深度优先遍历(dfs)&子集

【代码】广度优先遍历(bfs)和深度优先遍历(dfs)&子集。

沉下心,苦磨炼 319

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

深度优先遍历(DFS)&广度优先遍历(BFS)

深度优先遍历(Depth First Search) 特点 以观看b站视频为例 深度优先遍历是看完一个视频(视频a)后点击推荐视频的第一个(视频b),看完视频b后,再点击视频b推荐列表的第一个,……,假如不再推荐视频了,返回上一个视频,点击推荐视频的第二个…… 广度优先遍历 特点 广度优先遍历是看完当前视频(视频a)后点击推荐视频的第一个(视频b),看完视频b后返回视频a的推荐列表,将视频b记下,...

qq_41032991的博客 181

数据结构与算法-图(深度优先遍历dfs &广度优先遍历bfs)

文章目录图一、优先遍历二、代码1.Graph2.Demo总结 图 一、优先遍历 二、代码 1.Graph 代码如下(示例): Graph; //使用二维矩阵来表示图 import java.util.ArrayList; import java.util.Arrays; import java.util.LinkedList; public class Graph { //用链表表示其中的节点的数据 public ArrayList<String> VertexLi

slighting1128的博客 403

1003:深度优先遍历(DFS)&广度优先遍历(BFS)

Problem Description 设有一连通有向图,其顶点值为字符型并假设各值互不相等,采用邻接表表示法存储表示,求其广度优先遍历序列。  Input 有多组测试数据,每组数据的第一行为两个整数n和e,表示n个顶点和e条边(0<n<20);第二行为其n个顶点的值,按输入顺序进行存储;接着有e行,表示e条边的信息,每条边信息占一行,包括边所依附的顶点下标i和j,数据之间用空格...

以码平川的博客 416

深度优先遍历和广度优先遍历

深度优先遍历和广度优先遍历 什么是 深度/广度 优先遍历? 深度优先遍历简称DFS(Depth First Search),广度优先遍历简称BFS(Breadth First Search),它们是遍历图当中所有顶点的两种方式。 这两种遍历方式有什么不同呢?我们来举个栗子: 我们来到一个游乐场,游乐场里有11个景点。我们从景点0开始,要玩遍游乐场的所有景点,可以有什么...

a2217018103的博客 6万+

图文详解两种算法:深度优先遍历(DFS)和广度优先遍历(BFS)

图文详解两种算法:深度优先遍历(DFS)和广度优先遍历(BFS) 深度优先遍历(Depth First Search, 简称 DFS) 与广度优先遍历(Breath First Search)是图论中两种非常重要的算法,生产上广泛用于拓扑排序,寻路(走迷宫),搜索引擎,爬虫等,也频繁出现在 leetcode,高频面试题中。 前言 深度优先遍历(Depth First Search, 简称 DFS) 与广度优先遍历(Breath First Search)是图论中两种非常重要的算法,生产上广泛用于拓扑排序,寻

qq_44918331的博客 3万+

深度优先遍历(DFS)和广度优先遍历(BFS)

深度优先遍历(DFS)和广度优先遍历(BFS) 图的遍历:所谓遍历,即是对结点的访问。一个图有多个结点,如何遍历这些结点,有两种访问策略: 深度优先遍历(Depth First Search, 简称 DFS) 广度优先遍历(Breadth First Search 简称 BFS) 开发中广泛用于拓扑排序,寻路(走迷宫),搜索引擎,爬虫等 一、深度优先遍历 1.1 主要思路 从图中一个未访问的顶点 V 开始,沿着一条路一直走到底,然后从这条路尽头的节点回退到上一个节点,再从另一条路开始走到底

wdy00000的博客 2万+

C语言实现图的深度优先遍历和广度优先遍历

图的深度优先遍历和广度优先遍历图的遍历深度优先遍历广度优先遍历 图的遍历 从给定图中任意指定的顶点(称为初始点)出发,按照某种搜索方法沿着图的边访问图中所有顶点,使每个顶点仅被访问一次,这个过程称为图的遍历 图的遍历方法有两种,一种叫深度优先遍历(DFS),另一种叫广度优先遍历(BFS)。 深度优先遍历 深度优先遍历的过程是从图中的某个初始点v出发,首先访问初始点v,然后选择一个与顶点v相邻且没被...

BEICHENx1的博客 1万+

算法总结-深度优先遍历和广度优先遍历

所以广度优先遍历也叫层序遍历,先遍历第一层(节点 1),再遍历第二层(节点 2,3,4),第三层(5,6,7,8),第四层(9,10)。(1)、我们从根节点1开始深度优先遍历,它相邻的节点有2、3、4,依先遍历节点2,再遍历2的右边节点5,再遍历9,至此便无可遍历的节点。对于每个节点来说,先遍历当前节点,然后把右节点压栈,再压左节点(这样弹栈的时候会先拿到左节点遍历,符合深度优先遍历要求)。广度优先遍历,指的是从图的一个未遍历的节点出发,先遍历这个节点的相邻节点,再依次遍历每个相邻节点的相邻节点。

hhhlizhao的博客 2万+

图的遍历(广度优先遍历BFS,深度优先遍历DFS)

详细介绍了图的广度优先遍历(BFS)和深度优先遍历(DFS),涉及代码均有用图进行描述,非常详细!!!

2301_80035594的博客 2441
下一篇: 赫夫曼(Huffman)树/编码
Korpse
博客等级 码龄9年 115粉丝 25原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值