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

2023-05-16

深度优先搜索(DFS)与广度优先搜索(BFS)详解

1.广度优先搜索算法

1.1.前言

和树的遍历类似,图的遍历也是从图中某点出发,然后按照某种方法对图中所有顶点进行访问,且仅访问一次。

但是图的遍历相对树而言要更为复杂。因为图中的任意顶点都可能与其他顶点相邻,所以在图的遍历中必须记录已被访问的顶点,避免重复访问。

根据搜索路径的不同,我们可以将遍历图的方法分为两种:广度优先搜索和深度优先搜索。

1.2.图及图的遍历

概念

线性表和树两类数据结构,线性表中的元素是“一对一”的关系,树中的元素是“一对多”的关系,本章所述的图结构中的元素则是“多对多”的关系。图(Graph)是一种复杂的非线性结构,在图结构中,每个元素都可以有零个或多个前驱,也可以有零个或多个后继,也就是说,元素之间的关系是任意的。

图的遍历

图的遍历是指从图中的某一顶点出发,按照某种搜索方法沿着图中的边对图中的所有顶点访问一次且仅访问一次。

1.3.定义

广度优先搜索算法类似于二叉树的层序遍历,是一种分层的查找过程,每向前一步可能访问一批顶点,没有回退的情况,因此不是一个递归的算法。首先访问起始顶点v,接着由v出发,依存访问v的各个未访问过的邻接顶点w1,w2,…,wi,然后依次访问w1,w2,…,wi的所有未被访问过的邻接顶点;再从这些访问过的顶点出发,访问它们所有未被访问过的邻接顶点······依次类推,直到图中所有顶点都被访问过为止

1.4.算法图解

在这里插入图片描述

思路详解:

  1. 以节点1为起始顶点,开始访问
  2. 接着由v开始出发,依次次访问v的各个未访问过的邻接顶点 w 1 , w 2 , . . . , w i w1,w2,...,wi w1,w2,...,wi
  3. 然后依次访问 w 1 , w 2 , . . . , w i w1,w2,...,wi w1,w2,...,wi的所有未被访问的邻接顶点;
  4. 然后再从这些访问过的顶点出发,访问它们所有未被访问过的邻接顶点
  5. 直到所有顶点都被访问过为止;
  6. 如果此时图中尚有顶点未被访问,则另选图中一个未被访问过的顶点作为起始点,重复上述过程,直到图中所有顶点都被访问为止;

广度优先搜索算法类似于二叉树的层序遍历,是一种分层的查找过程,每向前一步可能访问一批顶点,没有回退的情况,因此不是一个递归的算法。

性能分析:

空间复杂度:

无论是邻接表还是邻接矩阵的存储方式,BFS算法都需要借助一个辅助队列Q,n个顶点均需入队一次,在最坏的情况下,空间复杂度为 O ( ∣ V ∣ ) O(|V|) O(V)

时间复杂度:

  • 邻接表:采用邻接表存储方式时,每个顶点均需搜索一次(或入队一次),故时间复杂度为 O ( ∣ V ∣ ) O(|V|) O(V),在搜索任意顶点的邻接点事每条边至少访问一次,故时间复杂度为 O ( ∣ E ∣ ) O(|E|) O(E),算法的总时间复杂度为 O ( ∣ V ∣ + ∣ E ∣ ) O(|V|+|E|) O(V+E)
  • 邻接矩阵:采用邻接矩阵存储方式时,查找每个顶点的邻接点所需的时间为 O ( ∣ V ∣ ) O(|V|) O(V),故算法总的时间复杂度为 O ( ∣ V 2 ∣ ) O(|V^2|) O(V2)

1.5.代码实现:

使用广度优先搜索遍历下图:

在这里插入图片描述

/**
 * @ClassName BFS
 * @Author Fenglin Cai
 * @Date 2021 09 30 19
 * @Description 图的广度优先搜索算法
 **/
import com.sun.istack.internal.NotNull;

import java.util.*;
//如同二叉树的层次遍历
public class BFS {

    public static class Node implements Comparable<Node> {

        private String name;

        private TreeSet<Node> set = new TreeSet<>();//有序的集合

        public Node() {
        }

        public Node(String name) {
            this.name = name;
        }

        public String getName() {
            return name;
        }

        public void setName(String name) {
            this.name = name;
        }

        public Set<Node> getSet() {
            return set;
        }

        public void setSet(TreeSet<Node> set) {
            this.set = set;
        }

        @Override
        public int compareTo(@NotNull Node o) {//排序规则
            if(name.hashCode()>o.getName().hashCode()) {
                return 1;
            }
            return 0;
        }
    }

    public Node init() {//初始化一个图及其节点
        Node nodeA = new Node("A");
        Node nodeB = new Node("B");
        Node nodeC = new Node("C");
        Node nodeD = new Node("D");
        Node nodeE = new Node("E");
        Node nodeF = new Node("F");
        Node nodeG = new Node("G");
        Node nodeH = new Node("H");
        nodeA.getSet().add(nodeB);
        nodeA.getSet().add(nodeC);
        nodeB.getSet().add(nodeD);
        nodeB.getSet().add(nodeE);
        nodeC.getSet().add(nodeF);
        nodeC.getSet().add(nodeG);
        nodeD.getSet().add(nodeH);
        nodeE.getSet().add(nodeH);
        return nodeA;
    }

    public void visite(Node node) {//访问每个节点

        System.out.print(node.getName()+" ");

    }

    public void bfs(Node start) {
        Queue<Node> queue = new LinkedList<>();//存储访问的节点

        Queue<Node> visite = new LinkedList<>();//存储访问过得节点

        queue.add(start);//起始节点添加到队列

        visite.add(start);//标识为访问过
        while (!queue.isEmpty()) {

            Node node = queue.poll();//队列头结点出队

            visite(node);

            Set<Node> set = node.getSet();//获取所有的直接关联的节点

            Iterator<Node> iterator = set.iterator();

            while(iterator.hasNext()) {

                Node next = iterator.next();

                if (!visite.contains(next)) {//不包含说明没有没有被访问

                    queue.add(next);

                    visite.add(next);
                }

            }
        }
    }

    public static void main(String[] args) {

        BFS bfs = new BFS();

        bfs.bfs(bfs.init());
    }
}

2.深度优先搜索算法

2.1.定义

与广度优先搜索不同,深度优先搜索(Depth-First-Search,DFS)类似于树的先序遍历。

思想从一个顶点V0开始,沿着一条路一直走到底,如果发现不能到达目标解,那就返回到上一个节点,然后从另一条路开始走到底,直到所有顶点被全部走完,这种尽量往深处走的概念即是深度优先的概念。

实例:

在这里插入图片描述

假设按照以下的顺序来搜索:

1.V0->V1->V4,此时到底尽头,仍然到不了V6,于是原路返回到V1去搜索其他路径;

2.返回到V1后既搜索V2,于是搜索路径是V0->V1->V2->V6,,找到目标节点,返回有解。

这样就搜索到了目标节点,当然这里在可以选择多个节点时,随意选择任一节点,如果走到V1节点选择V3的话,走的路径就是

V0->V1->V3->V5->V6->V2。

2.2.算法图解

思路图解:

思路如下所示:

图1:

根据深度优先搜索算法的思想,且在一个节点访问下一个节点有多个选择时选最小的规则下,路径就如图中给出所示,

  1. 从起始点节点1开始走,走过的路径:1->2->3->4->5
  2. 在走到第5个节点时因为节点2已经走过,所以无路可走了,然后回退到节点4,再走节点6,路径:1->2->3->4->5->4->6
  3. 到节点7时同样无路可走,回退到上一节点并继续走,路径:1->2->3->4->5->4->6->7->6->8->9

图2:

  1. 按照图2所给的规则来,从起始节点1开始走1->4->6->5->3
  2. 到节点3时因为节点1和节点6都已经走过,所以无路可走,回退到上一节点5,继续走1->4->6->5->3->5->2,

这样就遍历完了,搜索时,只需加个条件判断即可,满足条件直接跳出搜索。

有向图转换为最小生成树

在这里插入图片描述

性能分析:

空间复杂度:

DFS算法是一个递归算法,需要借助一个递归工作栈,故其空闲复杂度为 O ( ∣ V ∣ ) O(|V|) O(V).

时间复杂度:

遍历图的过程实质上是对每个顶点查找其邻接点的过程,其耗费的时间取决于所用的存储结构。

  • 邻接矩阵:查找每个顶点的邻接点所需的时间为 O ( ∣ V ∣ ) O(|V|) O(V),故总的时间复杂度为 O ( ∣ V ∣ 2 ) O(|V|^2) O(V2)
  • 邻接表:查找所有顶点的邻接点所需的时间为 O ( ∣ E ∣ ) O(|E|) O(E),访问顶点所需的时间为 O ( ∣ V ∣ ) O(|V|) O(V),此时,总的时间复杂度为 O ( ∣ V ∣ + ∣ E ∣ ) O(|V|+|E|) O(V+E)

2.3.代码实现

题目描述

在这里插入图片描述

题目:图1是一个城堡的地形图。请你编写一个程序,计算城堡一共有多少房间(相通的所有方块为一个房间),最大的房间有多大。城堡被分割成m*n(m≤50,r≤50)个方块,每个方块可以有0~4面墙。
输入

程序从标准输入设备读入数据。第一行是两个整数,分别是南北向、东西向的方块数。在接下来的输入行里,每个方块用一个数字(0≤p≤50)描述。用一个数字表示方块周围的墙,1表示西墙,2表示北墙,4表示东墙,8表示南墙。每个方块用代表其周围墙的数字之和表示。城堡的内墙被计算两次,方块(1,1)的南墙同时也是方块(2,1)的北墙。输入的数据保证城堡至少有两个房间。

输出

城堡的房间数、城堡中最大房间所包括的方块数。结果显示在标准输出设备上。

样例输入

4
7
11 6 11 6 3 10 6
7 9 6 13 5 15 5
1 10 12 7 13 7 5
13 11 10 8 10 12 13

样例输出

5 9

思路:
要想找到一个房间,就要遍历与这个房间相关联的每一个方块,假如方块1与方块2相同,方块2与方块3、方块4相同,方块1、2、3、4构成一份房间,那我们就要遍历每一个方块以求出房间大小。在遍历的时候还要标记当前方块,以便当前方块再次被遍历。

代码实现

如下:

#include<iostream>
#include<algorithm>
using namespace std;
 
int R, C;  //行数和列数
int color[60][60];   //用来标记当前房间是否访问过
int room[60][60];
int maxRoomArea = 0;   //用来记录面积最大的房间
int roomNumber = 0;    //房间数量
int roomArea;      //用来记录房间的面积
 
void dfs(int i, int k)
{
	if (color[i][k])
	{
		return;
	}
	roomArea++;    //房间的面积
	color[i][k] = roomNumber; //标记当前结点,防止再次遍历该节点
 
	//选择与当前结点相关联的另一个节点,继续dfs
	if ((room[i][k] & 1) == 0)dfs(i, k - 1);    //向西
	
	if ((room[i][k] & 2) == 0)dfs(i - 1, k);    //向北
	
	if ((room[i][k] & 4) == 0)dfs(i, k + 1);    //向东
	
	if ((room[i][k] & 8) == 0)dfs(i + 1, k);    //向南
	
}
 
int main()
{
	cin >> R >> C;
	for (int i = 1; i <= R; i++) {
		for (int j = 1; j <= C; j++) {
			cin >> room[i][j];
		}
	}
	memset(color, 0, sizeof(color));   //初始化
	for (int i = 1; i <= R; i++) {
		for (int j = 1; j <= C; j++) {
			if (!color[i][j]) {    //当 当前结点没有被遍历过时
				roomArea = 0;
				roomNumber++;
				dfs(i, j);
				maxRoomArea = max(roomArea, maxRoomArea);
			}
		}
	}
	cout << roomNumber << endl;
	cout << maxRoomArea << endl;
 
	system("pause");
	return 0;
}

3.深搜与广搜的比较

3.1.深度优先搜索的特点

  1. 无论问题的内容和性质以及求解要求如何不同,它们的程序结构都是相同的,即都是深度优先算法(一)和深度优先算法(二)中描述的算法结构,不相同的仅仅是存储结点数据结构和产生规则以及输出要求。
  2. 深度优先搜索法有递归以及非递归两种设计方法。一般的,当搜索深度较小、问题递归方式比较明显时,用递归方法设计好,它可以使得程序结构更简捷易懂。当搜索深度较大时,当数据量较大时,由于系统堆栈容量的限制,递归容易产生溢出,用非递归方法设计比较好。
  3. 深度优先搜索方法有广义和狭义两种理解。广义的理解是,只要最新产生的结点(即深度最大的结点)先进行扩展的方法,就称为深度优先搜索方法。在这种理解情况下,深度优先搜索算法有全部保留和不全部保留产生的结点的两种情况。而狭义的理解是,仅仅只保留全部产生结点的算法。本书取前一种广义的理解。不保留全部结点的算法属于一般的回溯算法范畴。保留全部结点的算法,实际上是在数据库中产生一个结点之间的搜索树,因此也属于图搜索算法的范畴。
  4. 不保留全部结点的深度优先搜索法,由于把扩展望的结点从数据库中弹出删除,这样,一般在数据库中存储的结点数就是深度值,因此它占用的空间较少,所以,当搜索树的结点较多,用其他方法易产生内存溢出时,深度优先搜索不失为一种有效的算法。
  5. 从输出结果可看出,深度优先搜索找到的第一个解并不一定是最优解。

如果要求出最优解的话,一种方法将是后面要介绍的动态规划法,另一种方法是修改原算法:把原输出过程的地方改为记录过程,即记录达到当前目标的路径和相应的路程值,并与前面已记录的值进行比较,保留其中最优的,等全部搜索完成后,才把保留的最优解输出。

3.2.广度优先搜索法的特点

  1. 在产生新的子结点时,深度越小的结点越先得到扩展,即先产生它的子结点。为使算法便于实现,存放结点的数据库一般用队列的结构。
  2. 无论问题性质如何不同,利用广度优先搜索法解题的基本算法是相同的,但数据库中每一结点内容,产生式规则,根据不同的问题,有不同的内容和结构,就是同一问题也可以有不同的表示方法。
  3. 当结点到跟结点的费用(有的书称为耗散值)和结点的深度成正比时,特别是当每一结点到根结点的费用等于深度时,用广度优先法得到的解是最优解,但如果不成正比,则得到的解不一定是最优解。这一类问题要求出最优解,一种方法是使用后面要介绍的其他方法求解,另外一种方法是改进前面深度(或广度)优先搜索算法:找到一个目标后,不是立即退出,而是记录下目标结点的路径和费用,如果有多个目标结点,就加以比较,留下较优的结点。把所有可能的路径都搜索完后,才输出记录的最优路径。
  4. 广度优先搜索算法,一般需要存储产生的所有结点,占的存储空间要比深度优先大得多,因此程序设计中,必须考虑溢出和节省内存空间得问题。
  5. 比较深度优先和广度优先两种搜索法,广度优先搜索法一般无回溯操作,即入栈和出栈的操作,所以运行速度比深度优先搜索算法法要快些。

总之,一般情况下,深度优先搜索法占内存少但速度较慢,广度优先搜索算法占内存多但速度较快,在距离和深度成正比的情况下能较快地求出最优解。因此在选择用哪种算法时,要综合考虑。决定取舍。

3.3.优缺点比较

广搜优缺点

优点

  • 对于解决最短或最少问题特别有效,而且寻找深度小
  • 每个结点只访问一遍,结点总是以最短路径被访问,所以第二次路径确定不会比第一次短

缺点

  • 内存耗费量大(需要开大量的数组单元用来存储状态)

使用场景:计算网络数据链路层的最短跳数,走迷宫的最短路径

深搜优缺点

优点

  • 能找出所有解决方案
  • 优先搜索一棵子树,然后是另一棵,所以和广搜对比,有着内存需要相对较少的优点

缺点

  • 要多次遍历,搜索所有可能路径,标识做了之后还要取消。
  • 在深度很大的情况下效率不高

Reference

https://blog.csdn.net/qq_41738049/article/details/94338715

https://blog.csdn.net/weixin_44341938/article/details/102250450

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

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

  • SQLite的SQL语法

    SQLite库可以解析大部分标准SQL语言 但它也省去了一些特性 并且加入了一些自己的新特性 这篇文档就是试图描述那些SQLite支持 不支持的SQL语法的 查看关键字列表 如下语法表格中 xff0c 纯文本用蓝色粗体显示 非终极符号为斜体
  • 动态链接库dll(Windows/C++)

    1 概念 xff08 1 xff09 动态链接库广泛用于Windows系统及应用程序 xff0c 不能单独被执行 xff0c 在应用程序运行期间被动态调用的模块文件 区别于静态链接库 xff0c 均属于独立的代码编译模块 xff0c 但静态
  • 【Java】反射时获取父类属性并赋值

    1 反射获取父类 在反射获取类里的所有属性的时候 xff0c 会遇到无法访问父类extends里面的值 这时候需要访问父类需要调用Class的方法getSuperclass 对父类进行遍历field 同时如果不想遍历到Object或者某个类
  • linux软件包安装命令——apt-get

    apt get是linux中APT软件包的管理工具 采用shell命令行的方式完成软件的安装 更新 卸载等操作 1 语法 apt get xff08 选项 xff09 xff08 参数 xff09 选项 xff1a c 指定配置文件 o 直
  • 浅谈路由器的wan、lan、wlan口和vlan/trunk口

    背景 另一篇博文分析了一个实际的路由问题 xff0c 为方便问题分析 xff0c 在此列出常用概念 vlan中的trunk口 VLAN Trunk以及三层交换 可以把switch某一端口设为trunk 端口 问题 IP地址分类 xff1a
  • bzoj4864 [BeiJing 2017 Wc]神秘物质

    http www elijahqi win 2018 01 26 bzoj4864 beijing 2017 wc E7 A5 9E E7 A7 98 E7 89 A9 E8 B4 A8 20 E2 80 8E Description 21
  • mysql8设置远程连接详细教程

    这是转载StackOverFlow上的回答 xff0c 原回答点此这里 Remote Access in MySQL 8 Allow access from any host sudo nano etc mysql mysql conf d
  • 倒水问题(bfs)

    题意概述 34 fill A 34 表示倒满A杯 xff0c 34 empty A 34 表示倒空A杯 xff0c 34 pour A B 34 表示把A的水倒到B杯并且把B杯倒满或A倒空 Input 输入包含多组数据 每组数据输入 A B
  • A-化学

    题目概述 假设如上图 xff0c 这个烷烃基有6个原子和5个化学键 xff0c 6个原子分别标号1 6 xff0c 然后用一对数字 a b 表示原子a和原子b间有一个化学键 这样通过5行a b可以描述一个烷烃基 你的任务是甄别烷烃基的类别
  • B-评测系统

    题目概述 例如某次考试一共八道题 xff08 A B C D E F G H xff09 xff0c 每个人做的题都在对应的题号下有个数量标记 xff0c 负数表示该学生在该题上有过的错误提交次数但到现在还没有AC xff0c 正数表示AC
  • week4_C TT的神秘礼物

    题目描述 TT 是一位重度爱猫人士 xff0c 每日沉溺于 B 站上的猫咪频道 有一天 xff0c TT 的好友 ZJM 决定交给 TT 一个难题 xff0c 如果 TT 能够解决这个难题 xff0c ZJM 就会买一只可爱猫咪送给 TT
  • week8_C 班长竞选(Kosaraju算法 SCC缩点)

    题目描述 大学班级选班长 xff0c N 个同学均可以发表意见 若意见为 A B 则表示 A 认为 B 合适 xff0c 意见具有传递性 xff0c 即 A 认为 B 合适 xff0c B 认为 C 合适 xff0c 则 A 也认为 C 合
  • week15实验 D_瑞瑞爱上字符串/F_东东:“来不及解释了,快上车!!”

    D 瑞瑞爱上字符串 题目 瑞瑞最近迷上了字符串 xff0c 因此决定出一个字符串的题 给定两个正整数 N K xff0c 考虑所有由 N 2 个 a 和 2 个 b 组成的字符串 xff0c 要求输出其中字典序第 K 小的 例如当 N 61
  • CSP-M4补题 A_TT数鸭子

    题目 这一天 xff0c TT因为疫情在家憋得难受 xff0c 在云吸猫一小时后 xff0c TT决定去附近自家的山头游玩 TT来到一个小湖边 xff0c 看到了许多在湖边嬉戏的鸭子 xff0c TT顿生羡慕 此时他发现每一只鸭子都不 一样
  • 第二道月模csp201604-3 路径解析

    题目 在操作系统中 xff0c 数据通常以文件的形式存储在文件系统中 文件系统一般采用层次化的组织形式 xff0c 由目录 xff08 或者文件夹 xff09 和文件构成 xff0c 形成一棵树的形状 文件有内容 xff0c 用于存储数据
  • 第三道月模csp201609-3炉石传说

    题目 炉石传说 xff1a 魔兽英雄传 xff08 Hearthstone Heroes of Warcraft xff0c 简称炉石传说 xff09 是暴雪娱乐开发的一款集换式卡牌游戏 xff08 如下图所示 xff09 游戏在一个战斗棋
  • 第四道月模csp201809-3 元素选择器

    题目背景 题目描述 输入输出 Input Output Sample Input Sample Output 数据规模和约定 思路分析 根据题意 xff0c 创建element结构体 xff0c 新建element类型数组e xff0c 用
  • Debian设置合上笔记本盖子不休眠

    序言正文 序言 在使用的debian的时候 xff0c 发现在哪都找不到设置合上笔记本盖子不做任何事情的选项 xff0c 不像Ubuntu可以在电源里设置 在这里介绍编辑Login Manager 的配置文件 xff08 logind co
  • 学生认证免费领取——使用阿里云服务器的Ubuntu版本,并进行图形化

    一 前言 我们学习和工作中经常需要使用Linux系统来跑程序 我们可以使用虚拟机装一个Ubuntu镜像 当然我们为了方便也可以使用阿里云的服务器 二 获取服务器 1 到阿里云官网 没有账号的同学注册一个就OK 2 搜索框搜索 学生优惠 3
  • Python Pyside/Pyqt 禁止拉伸窗体

    可能是搜索姿势不正确 xff0c 搜了半天没搜到正确答案 随手做个笔记 值可以写死 xff0c 但是一改UI又要重新改这 xff0c 太麻烦 xff0c 索性 加载UI文件时 def init self 对ui文件进行加载 self ui

随机推荐

  • Win10 编译运行Fortran77程序,开发环境搭建

    有个朋友说我讲的blas中的fortran语法有个地方不正确 xff0c 非说他自己的理解是对的 怎么肯能 xff0c f77都看了十几年了 拿出证据来才行 xff0c 朋友却说自己不知道怎么编译f77程序 好吧 xff0c 那还这么自信呀
  • C++ time(0)函数

    time 0 函数返回当前格林尼治标准时间与格林尼治标准时间1970年0分0秒的时间间隔 头文件 include lt ctime gt 问题 xff1a 得到当前时间 include lt iostream gt include lt c
  • 位运算左移、右移、按位取反

    目录 一 异或习题补充 1 260 只出现一次的数字 III 力扣 xff08 LeetCode xff09 二 位运算左移 1 概念 1 xff09 二进制形态 2 xff09 执行结果 3 xff09 负数左移的执行结果 4 xff09
  • 远程客户端无法连接到ubuntu

    检查SSH是否安装 xff1a ssh localhost 通过APT的安装命令非常方便 xff1a sudo apt install openssh server
  • 使用python读写内存–植物大战僵尸为例 pymem和tkinter

    使用python读写内存 植物大战僵尸为例 pymem和tkinter 废话不多 xff0c 直接上源代码 span class token keyword import span tkinter span class token keyw
  • Paramiko: Python使用paramiko连接主机报错“Authentication timeout”

    问题描述 xff1a 在用Python Paramiko库去连接主机时 始终无法连接 xff0c exception输出错误仅有 Authentication timeout connection 61 paramiko SSHClient
  • 流感传染

    题目描述 有一批易感人群住在网格状的宿舍区内 xff0c 宿舍区为n n的矩阵 xff0c 每个格点为一个房间 xff0c 房间里可能住人 xff0c 也可能空着 在第一天 xff0c 有些房间里的人得了流感 xff0c 以后每天 xff0
  • 获取B站某用户更多的关注数和粉丝数

    获取B站某用户更多的关注数和粉丝数 相关记录 一 前言 B 站最多只能翻 5 页用户的关注数和粉丝数 xff0c 如何能够看到更多呢 方法我也是从网上翻来的 xff0c 记载博客里 xff0c 算是我研究过这个话题了 二 需要的东西 关注数
  • HDU 1692 Destroy the Well of Life-卡时间-(枚举+剪枝)

    题意 xff1a 有n口井 xff0c 编号为1到n xff0c 打破第i口井需要p i 的能量 xff0c 但是只要井被打破里面的水会流到下一口井 xff0c 只要一口井的井水w i 多余一个上限l i 会自动打破 xff0c 求打破第n
  • 一.前言——人类是不是机器人

    一 前言 人类是不是机器人 随着时代的进步 xff0c 人工智能诞生了 又随着人工智能的进步 xff0c ChatGPT诞生了 xff0c 这不仅让我想出一个问题 xff1a 我们人类是不是机器人 xff1f ChatGPT xff0c 发
  • CCF期末预测之最佳阈值

    题目背景 考虑到安全指数是一个较大范围内的整数 小菜很可能搞不清楚自己是否真的安全 xff0c 顿顿决定设置一个阈 xff0c 以便将安全指数 y转化为一个具体的预测结果 会挂科 或 不会挂科 因为安全指数越高表明小菜同学挂科的可能性越低
  • (IOS系列)——TextFile属性设置

    初始化textfield并设置位置及大小 UITextField text 61 UITextField alloc initWithFrame CGRectMake 20 20 130 30 设置边框样式 xff0c 只有设置了才会显示边
  • windows10系统自带linux子系统(WSL)的安装目录

    如题 xff0c 最近一直想能不能不用VM virtualbox Hyper V等以虚拟机方式在windows10系统中安装linux xff0c 以便打造openwrt编译环境 在网上摸索了许久 xff0c 终于找到了一种方法 xff0c
  • 智慧农业IOT-onenet平台简单介绍

    智慧农业IOT onenet平台简单介绍 1 onenet平台简介 1 1 onenet简介 OneNET是由中国移动打造的PaaS物联网开放平台 平台能够帮助开发者轻松实现设备接入与设备连接 xff0c 快速完成产品开发部署 xff0c
  • 万物互联-stm32单片机简介、烧录、编程及其项目环境搭建

    万物互联 stm32单片机简介 烧录 编程 前言 xff1a stm32单片机这里给出简单介绍 xff0c 给不了解的朋友普及下硬件端的基本知识 xff0c 叙述的较为简单 xff0c 想深入研究的朋友可以去一些官方网站 论坛 博客汲取知识
  • 万物互联-IOT-ESP8266功能、作用、AT、连接onenet服务器简单介绍

    万物互联 IOT ESP8266功能 作用 AT 连接onenet服务器简单介绍 1 ESP8266简介 1 1 ESP8266简介 ESP8266是一个完整且自成体系的 WiFi 网络解决方案 xff0c 能够独立运行 xff0c 也可以
  • 云应用系统开发技术考点(面试题相关)

    云应用系统开发技术考点 xff08 面试题相关 xff09 1 CAP理论 概述 xff1a 一个分布式系统最多只能同时满足一致性 xff08 Consistency xff09 可用性 xff08 Availability xff09 和
  • Linux常用命令大全(超详细分类版)

    Linux常用命令大全 xff08 持续收集 分类 xff09 文件操作 常用 cd home 进入 39 home 39 目录 39 cd 返回上一级目录 cd 返回上两级目录 cd 进入个人的主目录 cd user1 进入个人的主目录
  • 图的基本概念、存储及基本操作(邻接矩阵法与邻接表法)

    图的基本概念 存储及基本操作 邻接矩阵法与邻接表法 xff09 1 图的基本概念 1 1 图的定义 图 xff08 Graph xff09 是由顶点的有穷非空集合和顶点之间边的集合组成 xff0c 通常表示为 xff1a G V E xff
  • 深度优先搜索(DFS)与广度优先搜索(BFS)算法详解

    深度优先搜索 xff08 DFS xff09 与广度优先搜索 xff08 BFS xff09 详解 1 广度优先搜索算法 1 1 前言 和树的遍历类似 xff0c 图的遍历也是从图中某点出发 xff0c 然后按照某种方法对图中所有顶点进行访