(DFS)深度优先搜索算法详解

2023-05-16

背景

DFS 英文全称为(Depth First Search),中文简称深度优先搜索算法,其过程为沿着每一个可能的路径向下进行搜索,直到不能再深入为止,并且每一个节点只能访问一次。
 

算法的搜索遍历图的步骤

(1)首先找到初始节点A

(2)依此从A未被访问的邻接点出发,对图进行深度优先遍历

(3)若有节点未被访问,则回溯到该节点,继续进行深度优先遍历

(4)直到所有与顶点A路径想通的节点都被访问过一次

 举个例子,在下方的无向连通图中,假设我们要从起始点A出发,使用深度优先搜索算法进行搜索,首先访问A->B->E,走不通了,回溯到A起始点,走第二个分支节点B,路径为A->C->F->H->G->D,走不通了,再回溯到起始点A,发现所有的节点都已经走过一次了,因此本次搜索结束。

 DFS的应用

深度优先搜索算法常常被用于解决迷宫问题。

首先我们定义一个5*5的迷宫矩阵 maze

0 1 0 0 0
0 1 1 1 0
0 0 0 0 0
0 1 1 1 0
0 0 0 1 0

其中0代表迷宫走可以走的路,1代表迷宫中的墙壁

要求从左上角出发,走到左下角结束(0,0)出发,走到(4,4)

我们使用深度优先搜索算法进行求解

(1)从起始点(0,0)出发,第一步只能往下走(1,0),第二步走到交叉路口(2,0)

01000
01110
00000
01110
00010

(2)由于出口在右下角,设定优先顺序,下>右>左>上

(3)走到(2,0)处开始往下走,直到走到(4,2)发现走不通

01000
01110
00000
01110
00010

(4)此时回溯到上一节点(2,0),开始沿着另一个分支进行深度优先搜索

01000
01110
00000
01110
00010

(5)在节点(2,4)中再次遇到分支,优先往下走,最终走到(4,4)走出迷宫

01000
01110
00000
01110
00010

(6)因此最终走出迷宫的路径为:

(0,0)->(1,0)->(2,0)->(2,1)->(2,2)->(2,3)->(2,4)->(3,4)->(4,4)

(6)假设迷宫的出口在(2,0),则回溯到最近的未走过的分支顶点(2,4)往上走,最终走到终点

01000
01110
00000
01110
00010

代码

def DFS(x, y):
    if x <0 or x >= len(maze) or y < 0 or y >= len(maze[0]):#走出了迷宫墙外,不合法
        return False
    if maze_visit[x][y] == True:#防止走回头
        return False
    if maze[x][y] == 1:#标记为1的不能走
        return False
    maze_visit[x][y] = True#标记本次递归路线,防止走回头
    if x == N and y == M:#走到终点停止递归
        myStack.append((x,y))
        return True
    for m in move:#四个方向尝试走
        next_x = x+m[0]
        next_y = y+m[1]
        if DFS(next_x, next_y):#判断能不能走通,能走通继续下一步递归
            myStack.append((x,y))#将走通的路径记录下来
            return True
    return False
 
maze = [[0, 1, 0, 0, 0],
        [0, 1, 1, 1, 0],
        [0, 0, 0, 0, 0],
        [0, 1, 1, 1, 0],
        [0, 0, 0, 1, 0]]#定义迷宫
maze_visit = [[False, False, False, False, False],
              [False, False, False, False, False],
              [False, False, False, False, False],
              [False, False, False, False, False],
              [False, False, False, False, False]]#记录路线是否已经走过,防止走反

move = [(0,1), (0,-1), (1,0), (-1,0)] #定义四个方向走的顺序
N, M = 4, 4 #定义出口的位置
myStack = []#记录走通的路径
DFS(0,0)#递归求解
myStack = myStack[::-1]#反转列表
for row in myStack:
    print('(' + str(row[0]) + ','+ str(row[1]) + ')')

输出迷宫路线

>>>move = [(0,1), (0,-1), (1,0), (-1,0)] #定义四个方向走的顺序
>>>N, M = 4, 4 #定义出口的位置
>>>myStack = []#记录走通的路径
>>>DFS(0,0)#递归求解
>>>myStack = myStack[::-1]#反转列表
>>>for row in myStack:
...    print('(' + str(row[0]) + ','+ str(row[1]) + ')')
(0,0)
(1,0)
(2,0)
(2,1)
(2,2)
(2,3)
(2,4)
(3,4)
(4,4)
01000
01110
00000
01110
00010

变更出口位置

>>>move = [(0,1), (0,-1), (1,0), (-1,0)] #定义四个方向走的顺序
>>>N, M = 0, 2 #定义出口的位置
>>>myStack = []#记录走通的路径
>>>DFS(0,0)#递归求解
>>>myStack = myStack[::-1]#反转列表
>>>for row in myStack:
...    print('(' + str(row[0]) + ','+ str(row[1]) + ')')
(0,0)
(1,0)
(2,0)
(2,1)
(2,2)
(2,3)
(2,4)
(1,4)
(0,4)
(0,3)
(0,2)
01000
01110
00000
01110
00010

递归的回溯过程

以入口为(0,0),出口为(0,2)为例,详细说一下递归的回溯过程

01000
01110
00000
01110
00010

在代码中添加增加埋点,使每次发生递归时,对参数(x,y)进行输出

def DFS(x, y):
    print("end:", str((x, y)))
    if x <0 or x >= len(maze) or y < 0 or y >= len(maze[0]):#走出了迷宫墙外,不合法
        print("False: 走出了迷宫墙外,不合法")
        return False
    if maze_visit[x][y] == True:#防止走回头
        print("False: 往回走,不合法")
        return False
    if maze[x][y] == 1:#标记为1的不能走
        print("False: 穿墙,不合法")
        return False
    maze_visit[x][y] = True#标记本次递归路线,防止走回头
    if x == N and y == M:#走到终点停止递归
        print("True: 到达终点")
        myStack.append((x,y))
        return True
    for m in move:#四个方向尝试走
        print("strat:", str((x,y)), "move:", str(m))
        next_x = x+m[0]
        next_y = y+m[1]
        if DFS(next_x, next_y):#判断能不能走通,能走通继续下一步递归
            myStack.append((x,y))#将走通的路径记录下来
            return True
        print("回溯上一节点")
    return False

创建好埋点后执行代码,输出如下:

>>>maze = [[0, 1, 0, 0, 0],
...        [0, 1, 1, 1, 0],
...        [0, 0, 0, 0, 0],
...        [0, 1, 1, 1, 0],
...        [0, 0, 0, 1, 0]]#定义迷宫
>>>maze_visit = [[False, False, False, False, False],
...              [False, False, False, False, False],
...              [False, False, False, False, False],
...              [False, False, False, False, False],
...              [False, False, False, False, False]]#记录路线是否已经走过,防止走反
>>>move = [(0,1), (0,-1), (1,0), (-1,0)] #定义四个方向走的顺序
>>>N, M = 0, 2 #定义出口的位置
>>>myStack = []#记录走通的路径
>>>DFS(0,0)#递归求解
end: (0, 0)
strat: (0, 0) move: (0, 1)
end: (0, 1)
False: 穿墙,不合法
回溯上一节点
strat: (0, 0) move: (0, -1)
end: (0, -1)
False: 走出了迷宫墙外,不合法
回溯上一节点
strat: (0, 0) move: (1, 0)
end: (1, 0)
strat: (1, 0) move: (0, 1)
end: (1, 1)
False: 穿墙,不合法
回溯上一节点
strat: (1, 0) move: (0, -1)
end: (1, -1)
False: 走出了迷宫墙外,不合法
回溯上一节点
strat: (1, 0) move: (1, 0)
end: (2, 0)
strat: (2, 0) move: (0, 1)
end: (2, 1)
strat: (2, 1) move: (0, 1)
end: (2, 2)
strat: (2, 2) move: (0, 1)
end: (2, 3)
strat: (2, 3) move: (0, 1)
end: (2, 4)
strat: (2, 4) move: (0, 1)
end: (2, 5)
False: 走出了迷宫墙外,不合法
回溯上一节点
strat: (2, 4) move: (0, -1)
end: (2, 3)
False: 往回走,不合法
回溯上一节点
strat: (2, 4) move: (1, 0)
end: (3, 4)
strat: (3, 4) move: (0, 1)
end: (3, 5)
False: 走出了迷宫墙外,不合法
回溯上一节点
strat: (3, 4) move: (0, -1)
end: (3, 3)
False: 穿墙,不合法
回溯上一节点
strat: (3, 4) move: (1, 0)
end: (4, 4)
strat: (4, 4) move: (0, 1)
end: (4, 5)
False: 走出了迷宫墙外,不合法
回溯上一节点
strat: (4, 4) move: (0, -1)
end: (4, 3)
False: 穿墙,不合法
回溯上一节点
strat: (4, 4) move: (1, 0)
end: (5, 4)
False: 走出了迷宫墙外,不合法
回溯上一节点
strat: (4, 4) move: (-1, 0)
end: (3, 4)
False: 往回走,不合法
回溯上一节点
回溯上一节点
strat: (3, 4) move: (-1, 0)
end: (2, 4)
False: 往回走,不合法
回溯上一节点
回溯上一节点
strat: (2, 4) move: (-1, 0)
end: (1, 4)
strat: (1, 4) move: (0, 1)
end: (1, 5)
False: 走出了迷宫墙外,不合法
回溯上一节点
strat: (1, 4) move: (0, -1)
end: (1, 3)
False: 穿墙,不合法
回溯上一节点
strat: (1, 4) move: (1, 0)
end: (2, 4)
False: 往回走,不合法
回溯上一节点
strat: (1, 4) move: (-1, 0)
end: (0, 4)
strat: (0, 4) move: (0, 1)
end: (0, 5)
False: 走出了迷宫墙外,不合法
回溯上一节点
strat: (0, 4) move: (0, -1)
end: (0, 3)
strat: (0, 3) move: (0, 1)
end: (0, 4)
False: 往回走,不合法
回溯上一节点
strat: (0, 3) move: (0, -1)
end: (0, 2)
True: 到达终点

接下来详细对每一步进行解析,先看方向依次为:右>左>下>上

move = [(0,1), (0,-1), (1,0), (-1,0)]

第一步:(0,0)往右走到(0,1)穿墙,不合法,回溯到(0,0)

第二步:(0,0)往左走到(0,-1)走出了迷宫墙外,不合法,回溯到(0,0)

第三步:(0,0)往下走到(1,0)合法,将(1,0)作为起点,进入DFS(1,0)

end: (0, 0)
strat: (0, 0) move: (0, 1)
end: (0, 1)
False: 穿墙,不合法
回溯上一节点
strat: (0, 0) move: (0, -1)
end: (0, -1)
False: 走出了迷宫墙外,不合法
回溯上一节点
strat: (0, 0) move: (1, 0)
end: (1, 0)
01000
01110
00000
01110
00010

第四步:(1,0)往右走到(1,1)穿墙,不合法,回溯到(1,0)

第五步:(1,0)往左走到(1,-1)走出了迷宫墙外,不合法,回溯到(1,0)

第六步:(1,0)往下走到(1,0)合法,将(2,0)作为起点,进入DFS(2,0)

strat: (1, 0) move: (0, 1)
end: (1, 1)
False: 穿墙,不合法
回溯上一节点
strat: (1, 0) move: (0, -1)
end: (1, -1)
False: 走出了迷宫墙外,不合法
回溯上一节点
strat: (1, 0) move: (1, 0)
end: (2, 0)
01000
01110
00000
01110
00010

第七步:(2,0)往右走到(2,1)合法,将(2,1)作为起点,进入DFS(2,1)

第八步:(2,1)往右走到(2,2)合法,将(2,2)作为起点,进入DFS(2,2)

第九步:(2,2)往右走到(2,3)合法,将(2,3)作为起点,进入DFS(2,3)

第十步:(2,3)往右走到(2,4)合法,将(2,4)作为起点,进入DFS(2,4)

第十一步:(2,4)往右走到(2,5)走出了迷宫墙外,不合法,回溯到(2,4)

第十二步:(2,4)往左走到(2,3)往回走,不合法,回溯到(2,4)

第十三步:(2,4)往下走到(3,4)合法,将(3,4)作为起点,进入DFS(3,4)

strat: (2, 0) move: (0, 1)
end: (2, 1)
strat: (2, 1) move: (0, 1)
end: (2, 2)
strat: (2, 2) move: (0, 1)
end: (2, 3)
strat: (2, 3) move: (0, 1)
end: (2, 4)
strat: (2, 4) move: (0, 1)
end: (2, 5)
False: 走出了迷宫墙外,不合法
回溯上一节点
strat: (2, 4) move: (0, -1)
end: (2, 3)
False: 往回走,不合法
回溯上一节点
strat: (2, 4) move: (1, 0)
end: (3, 4)
01000
01110
00000
01110
00010

第十四步:(3,4)往右走到(3,5)走出了迷宫墙外,不合法,回溯到(3,4)

第十五步:(3,4)往左走到(3,3)往回走,不合法,回溯到(3,4)

第十六步:(3,4)往下走到(4,4)合法,将(4,4)作为起点,进入DFS(4,4)

strat: (3, 4) move: (0, 1)
end: (3, 5)
False: 走出了迷宫墙外,不合法
回溯上一节点
strat: (3, 4) move: (0, -1)
end: (3, 3)
False: 穿墙,不合法
回溯上一节点
strat: (3, 4) move: (1, 0)
end: (4, 4)
01000
01110
00000
01110
00010

第十七步:(4,4)往右走到(4,5)走出了迷宫墙外,不合法,回溯到(4,4)

第十八步:(4,4)往左走到(4,3)穿墙,不合法,回溯到(4,4)

第十九步:(4,4)往下走到(4,4)走出了迷宫墙外,不合法,回溯到(4,4)

第十九步:(4,4)往上走到(3,4)往回走,不合法,回溯到(4,4)

第二十步:此时四个方向都走不通,因此回溯到上一个交叉路口(3,4),在第十四到第十八步(3,4)节点已经往右,左,下三个方向走过一次了(move循环到了第三位),因此只剩往上走一种选择,(3,4)往上走到(2,4)往回走,不合法,回溯到(2,4)

第二十一步:同理(2,4)在第十一到第十三步已经往右,左,下三个方向走过一次了,因此只剩往上走一种选择,(3,4)往上走到(1,4),合法,将(1,4)作为起点,进入DFS(1,4)

strat: (4, 4) move: (0, 1)
end: (4, 5)
False: 走出了迷宫墙外,不合法
回溯上一节点
strat: (4, 4) move: (0, -1)
end: (4, 3)
False: 穿墙,不合法
回溯上一节点
strat: (4, 4) move: (1, 0)
end: (5, 4)
False: 走出了迷宫墙外,不合法
回溯上一节点
strat: (4, 4) move: (-1, 0)
end: (3, 4)
False: 往回走,不合法
回溯上一节点
回溯上一节点
strat: (3, 4) move: (-1, 0)
end: (2, 4)
False: 往回走,不合法
回溯上一节点
回溯上一节点
strat: (2, 4) move: (-1, 0)
end: (1, 4)
01000
01110
00000
01110
00010

从(1,4)开始到达终点的步骤再次就不进行详细解析了~~~(同理)最终到达终点(0,2)

strat: (1, 4) move: (0, 1)
end: (1, 5)
False: 走出了迷宫墙外,不合法
回溯上一节点
strat: (1, 4) move: (0, -1)
end: (1, 3)
False: 穿墙,不合法
回溯上一节点
strat: (1, 4) move: (1, 0)
end: (2, 4)
False: 往回走,不合法
回溯上一节点
strat: (1, 4) move: (-1, 0)
end: (0, 4)
~~~~~~~~~~~~~~~~~~~~
strat: (0, 4) move: (0, 1)
end: (0, 5)
False: 走出了迷宫墙外,不合法
回溯上一节点
strat: (0, 4) move: (0, -1)
end: (0, 3)
~~~~~~~~~~~~~~~~~~~~
strat: (0, 3) move: (0, 1)
end: (0, 4)
False: 往回走,不合法
回溯上一节点
strat: (0, 3) move: (0, -1)
end: (0, 2)
True: 到达终点

!!!!!!!!!!!!!!!!!!递归结束!!!!!!!!!!!!!!!!!!!!

使用递归求解的案例

匈牙利算法寻找最大匹配_202xxx的博客-CSDN博客

【牛客网华为机试】HJ28 素数伴侣_202xxx的博客-CSDN博客

【牛客网华为机试】HJ43 迷宫问题_202xxx的博客-CSDN博客

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

(DFS)深度优先搜索算法详解 的相关文章

  • 寻找 有向图/无向图 所有环路的DFS暴力求解法(ps:C++代码,复杂度爆炸警告,生产环境慎用)

    思路 1 DFS算法可以求解图中从一点到另一点的全部路径 2 通过枚举所有顶点的邻接点 然后通过DFS寻找枚举点到的所有路径来寻找环路 3 思路很简单 但是算法复杂度确实是太高了 下面上代码 include
  • [POI2008]CLO-Toll

    题目链接 本题有个小点需要注意 如果说它是多个相互不连通的图 也有可能形成一个可行解 多个环嘛 然后剩下的 就是dfs去跑 如果跑出了返祖边 那么这个返祖边抵达的点 将改变原来的方向 剩下的就都是正方向 dfs直接跑就是了 include
  • UVA1613 K-GraphOddity

    UVA1613 K GraphOddity 题目传送门 刚看第一眼一点思路都没有 后面看了大佬的题解发现这道题其实是一道水题 用到的方法就是DFS遍历图 我是废物 题目意思很简单 就不分析了 下面直接说方法 首先求出k 然后dfs遍历一遍图
  • 编程训练————岛屿数量(C++)

    岛屿数量 题目描述 主要思想 深度优先搜索 广度优先搜索 代码实现 深度优先搜索 广度优先搜索 题目描述 给你一个由 1 陆地 和 0 水 组成的的二维网格 请你计算网格中岛屿的数量 岛屿总是被水包围 并且每座岛屿只能由水平方向或竖直方向上
  • 字符串搜索dfs题79_208_212

    79 Word Search 给一个二维字符数组和一个字符串 判断是否存在一条路径使得路径字符等于所给字符串 board A B C E S F C S A D E E Given word ABCCED return true Given
  • 力扣(LeetCode)257. 二叉树的所有路径

    给定一个二叉树 返回所有从根节点到叶子节点的路径 说明 叶子节点是指没有子节点的节点 示例 输入 1 2 3 5 输出 1 gt 2 gt 5 1 gt 3 解释 所有根节点到叶子节点的路径为 1 gt 2 gt 5 1 gt 3 通过次数
  • 已安装的nginx,添加新模块fastdfs-nginx-module

    1 先看nginx的安装位置和运行目录 不清楚的可以使用命令查看 find name nginx 2 确定安装目录和运行目录后 查看当前nginx的安装路径及已安装的模块等信息 usr local nginx sbin nginx V 3
  • 统计封闭岛屿的数目

    1254 统计封闭岛屿的数目 关于岛屿的相似题目 岛屿数量 二维矩阵的dfs算法 封闭岛屿数量 二维矩阵的dfs算法 统计封闭岛屿的数目 统计子岛屿 不同岛屿的数量 class MaxAreaOfIsland floodFill 算法 12
  • Maximum Diameter Graph 【CodeForces - 1082D】【搜索+构造】

    题目链接 一开始忘记输出有多少条边 WA了好几发都跑不过第一组测试样例 开始怀疑自己是不是读了道假题 然后在大佬们的帮助下 终于AC 好伤心 读假样例 一定是我太弱了 我的思想是采用了树链剖分的dfs 构造思想 可能是因为最近少用了树链剖分
  • 算法---LeetCode 200. 岛屿数量

    1 题目 原题链接 给你一个由 1 陆地 和 0 水 组成的的二维网格 请你计算网格中岛屿的数量 岛屿总是被水包围 并且每座岛屿只能由水平方向和 或竖直方向上相邻的陆地连接形成 此外 你可以假设该网格的四条边均被水包围 示例 1 输入 gr
  • 路径搜索问题

    之前碰到的很多问题都可以归结为路径搜索问题 就是求两点之间的路经 1 是否存在路径 2 求任意一条路径 3 求所有路径 求是否有路径和任意一条路径的时候 和正常遍历一样 一个点被mark之后不再访问 因为如果这个结点到终点有路径 之前就应该
  • UVA12166 Equilibrium Mobile

    VJ传送门 一道思维题 刚开始看的时候没什么思路 在博客园上参考了大佬的解析 在这里总结一下 一 分析 这道题要求让天平平衡所需要的最小改动次数 至少有一个不变 我们可以先选定一个不变的基准 然后改变其他的秤砣 得到以此为基准的天平的总重量
  • 【2019年ICPC南昌网络赛】Distance on the tree【DFS+线段树合并(可持久化线段树)】

    题目链接 DSM Data Structure Master once learned about tree when he was preparing for NOIP National Olympiad in Informatics i
  • 剪格子 蓝桥杯 211

    题目描述 如下图所示 3 x 3 的格子中填写了一些整数 我们沿着图中的红色线剪开 得到两个部分 每个部分的数字和都是 60 本题的要求就是请你编程判定 对给定的 m n 的格子中的整数 是否可以分割为两个部分 使得这两个区域的数字和相等
  • 基础算法题——迷宫(递推)

    迷宫 题目链接 解题思路 暴力法 利用 dfs 遍历每一条可能的路径 将遍历的权值和不断取余 不足 当 n m 取较大的情况下 所遍历的路径可能会暴增 出现超时的情况 递推法 从题目上我们可以发现 最终的权值和是要对 mod 取余的 利用这
  • 牛客剑指offer之【JZ12 矩阵中的路径】

    哈喽 这次真的是好久不见呀 我回来啦 接下来的日子我会不断更新牛客上的剑指offer题解 为什么这么做呢 是因为博主刷题总是刷了忘忘了刷 一样的题目换种形式就要做好久 说到底还是对知识点的理解不够透彻 加之算法对一个即将找工作的大学生来说更
  • [ACM] 1016 Prime Ring Problem (深度优先搜索)

    Prime Ring Problem Problem Description A ring is compose of n circles as shown in diagram Put natural number 1 2 n into
  • Leetcode【DFS BFS】

    Leetcode 200 岛屿数量 题目 解题 思路 DFS解法 BFS解法 题目 给你一个由 1 陆地 和 0 水 组成的的二维网格 请你计算网格中岛屿的数量 岛屿总是被水包围 并且每座岛屿只能由水平方向和 或竖直方向上相邻的陆地连接形成
  • Fix a Tree【Codeforces 699 D】【dfs + 树的性质】

    Codeforces Round 363 Div 2 D 题意 有N个点 每个点i都有一个父节点p i 如果 i p i 则是说明i结点是根结点 现在我们给出这样的1 N的p i 这可能是不合法的 问 我们应该最少改变多少个使它变成一棵合法
  • 仙岛求药 —— dfs 与 bfs求解

    样例输入1 8 8 样例输出1 10 样例输入2 9 6 样例输出2 1 dfs ps 使用dfs会运行超时 30组测试数据只能通过部分 其实这种最短路径 最少操作的问题最好还是靠bfs解决 import java util Scanner

随机推荐

  • 多传感器融合SLAM、导航研究和学习专栏汇总

    从2021年9月份开始学习多传感器融合SLAM xff0c 期间也发了不少博客记录学习过程 xff0c 自己对SLAM的认识也逐渐加深 xff0c 以前一些博客中会有一些错误的地方还未及时去修正 xff0c 敬请谅解 由于课题组需要和自身发
  • 启航篇——四旋翼飞行器之入坑两年心路历程和毕设总结

    笔者今年大四毕业 xff0c 由于之前参加比赛及准备考研 xff0c 没有时间总结这两年来做四旋翼飞行器的心得体会 现在借毕业设计这个契机 xff0c 想把这件事做了 xff0c 算是两年的收尾工作 xff0c 也是个新的开始 先从介绍这两
  • Gazebo学习笔记(一)

    搭建一个移动车 ctrl 43 m 进入到gazebo编辑界面 ctrl 43 m 进入到gazebo编辑界面 1 搭建一个车底盘 xff0c 选择simple shapes 的box xff0c 点击后在编辑框中释放 2 利用resize
  • 1分钟教会你二进制撩妹(汉)读心术

    近些年来 xff0c 小魔发现 xff0c 对于年轻的男女而言 xff0c 一些传统的节日似乎都变成了情人节或者脱单节 xff0c 就连 光棍节 xff0c 实际上很多人都是抱着节前或者是当天脱单而过的 双11 光棍节 即将来临 xff0c
  • 树莓派光敏传感器控制LED小灯的开关

    今天来做一个关于光敏传感器的使用demo xff0c 如图 xff0c 我采用的是普通用于开发的光敏传感器 传感器的基板上有两个LED xff0c 上一个是表示DO的高低电平 xff0c 下一个表示是否通电 当挡住传感头之后 xff0c D
  • Opencv+YOLO3目标检测/C++

    1 引言 YOLO3能够快速识别图片和视频中的80种物体 xff0c 而且实时性强 xff0c 准确度接近SSD Opencv是目前最流行的开源图像处理库 xff0c 使用Opencv能够非常方便的对图像进行处理 Opencv4 0已经包含
  • Linux安装Docker

    安装前菜 如何卸载Docker 1 查询docker安装包 yum list installed grep docker 2 删除安装包 yum remove docker 3 删除镜像 容器等 rm rf var lib docker 下
  • 北邮初试+复试经验分享

    初试情况 xff1a 政治 53 英语 70 数学 122 计算机综合 xff08 803 xff09 110 一些相关的基本情况 xff1a 本科专业数学 本科期间学过数据结构 通过了英语四六级 本科成绩还算可以 初试材料选择 xff08
  • apt命令概述

    目录 Linux软件仓库 软件源配置 apt命令 常见的命令如下 xff1a 常见的用法 示例 xff1a 使用apt安装redis软件 Linux软件仓库 Ubuntu采用集中式的软件仓库机制 xff0c 将各式各样 的软件包分门别类地存
  • 索引覆盖与回表

    懂的越多 xff0c 不懂的越多 上回书说到 xff1a 什么情况下 xff0c 索引下推没办法提高sql查询效率 xff1f 表info主键id名称name值value别名realname 对于info表 xff0c 我们现在有 xff0
  • Ubuntu18.04安装实时内核Preempt-RT

    文章目录 1 安装环境2 安装依赖包3 查看内核版本4 下载新的内核和对应的Preempt RT补丁5 解压缩6 打补丁7 配置内核8 编译内核9 校验结果10 重启11 测试12 调整分辨率 1 安装环境 Ubuntu18 04内核版本
  • CAS 5.2.X 使用cas-overlay-template 搭建cas-server

    1 下载 cas overlay template 地址 xff1a https github com apereo cas overlay template 选择需要的版本 xff1a cas 6 x开始使用gradle构建 xff0c
  • Jupyter 更改主题解决 jt 不存在问题

    pip安装之后 xff0c 并不是像传统的那样安装到了envs中的script文件中 而是在C盘的appdata C Users Administrator AppData Roaming Python Python36 Scripts 中
  • 树莓派4 桌面图标显示 No wireless interface found

    树莓派4 桌面图标显示 No wireless interface found 解决方式 先使用有线链接网络 安装wpasupplicant wpagui libengine pkcs11 openssl sudo apt install
  • mysql _外键、实体关系与ER图

    外键约束 概念 A实体的某个字段指向 B实体的主键 则称A实体的那个字段为该实体的外键 一个表里可以有多个外键 span class hljs operator span class hljs keyword drop span span
  • hadoop系列之Configuration类解析

    前言 Configuration是hadoop中五大组件的公用类 xff0c 所以放在了core下 xff0c org apache hadoop conf Configruration 这个类是作业的配置信息类 xff0c 任何作用的配置
  • tty_read和tty_write

    一 tty read 对于tty read这个函数 xff0c 很多标志我也没有弄得太清楚 xff0c 但是问题不大 xff0c 以后有机会在看 我觉得重点是看数据怎么从cdc驱动到通过线路规划到tty xff0c 再从tty到用户空间 标
  • 深度学习 - 模型调优经历(1)

    模型调优经历 xff08 1 xff09 背景遇到问题思路解决办法 背景 样本规模及划分 bullet 二分类问题 xff0c 正负样本 1 1 xff0c 特征数 xff1a 20
  • Android SDK下载安装及配置教程

    让大家很方便的不用翻墙不用代理地就完成Android开发环境的搭建 总结起来 xff0c Android开发环境搭建可以分为以下四步 xff1a 第一步 安装JDK xff1b 略 第二步 安装Eclipse xff1b 略 第三步 下载并
  • (DFS)深度优先搜索算法详解

    背景 DFS 英文全称为 xff08 Depth First Search xff09 xff0c 中文简称深度优先搜索算法 xff0c 其过程为沿着每一个可能的路径向下进行搜索 xff0c 直到不能再深入为止 xff0c 并且每一个节点只