关于dfs和bfs基本思想

news/2024/7/20 22:11:35 标签: 深度优先, 宽度优先, 算法

dfs就是一个递归

简单模板:

void dfs(int u)
{
    // st[u] = true;
    
    if(u > n)
    {
        if(条件)
        {
            输出
        }
    }
    
    //枚举
    for(int i = 0; i < n; i ++ )
    {
        if(!st[i])
        {
            dfs(i);
        }
    }
}
void dfs(int u)
{
    st[u] = true;
    cout << u;
    //先序遍历
    dfs(tree[u].l);

    dfs(tree[u].r)
}
void dfs(int u)
{
    st[u] = true;
    cout << u;

    for(int i = h[u]; i != -1; i = ne[i])
    {
        int j = e[i];
        if(!st[j]) dfs(j);
    }
}

用途广泛,目前我所用到(之后再补充):

1.各种枚举:指数型,排列型,组合型.......

2.二叉树,图的遍历:二叉树是递归左右子树,图是递归邻接表......

基本思想:

一条路走到黑,深度优先,如果加上回溯和剪枝等等能够解决很多事情,比如走迷宫啦,暴力枚举等等。

bfs:

bfs不用递归,效率比较高,相对来说dfs只能枚举20以内的数据范围

queue<int> q;
void bfs(int start)
{
    q.push(start);
    st[start] = true;

    while(q.size())
    {
        auto t = q.front();
        q.pop();

        for(int i = t; i <= n; i ++ )
        {
            if(!st[i]) 
            {
                st[i] = true;
                q.push(i); 
            }
        }
    }
    
}

用途也很广泛:

1.走地图(嘎嘎快)

2.最短路

3.遍历图和树

基本思想:

用队列入队、出队达到不用递归的目的,能够不用一头摸到黑,而是将每一层次都先遍历

谓之宽度优先


http://www.niftyadmin.cn/n/4971610.html

相关文章

【实训项目】“优教”APP设计

1.设计摘要 随着科技的发展和信息技术的日益普及,很多家长抱着望子成龙的心态,不遗余力的为孩子找合适的家教&#xff0c;而很多在校大学生也希望通过当家教增加一点经济收入,基于这一点家教服务平台将提供更好的管理系统,使家长更加了解学生,也通过这个平台使家教管理者对于大…

如何可以管理监督员工工作微信?

自从微信管理系统研发上线之后&#xff0c;为了各企业带来了福音。 很多用户企业都是这样评论微信管理系统的&#xff1a;员工的所有微信聊天记录后台都可以清楚明了的看到&#xff0c;聊天记录都是永久保存的&#xff0c;不担心员工在手机上把聊天记录删除&#xff0c;杜绝员…

基于Java+SpringBoot+Vue前后端分离学生干部管理系统设计和实现

博主介绍&#xff1a;✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专…

积跬步至千里 || 数学基础、算法与编程

数学基础、算法与编程 1. BAP 技能 BAP 技能是指基础(Basic)、算法(Algorithm)和编程(Programm)三种基本技能的深度融合。理工科以数学、算法与编程为根基&#xff0c;这三个相辅相成又各有区别。 &#xff08;1&#xff09;数学以线性代数为主要研究工具和部分微积分技术为手…

(三)Redis——Set

SADD key value SMEMBERS 127.0.0.1:6379> SADD set aaa 1 127.0.0.1:6379> SMEMBERS set aaa 127.0.0.1:6379> SADD set aaa 0 127.0.0.1:6379> SMEMBERS set aaaSISMEMBER 判断 aaa 是否在 set 中 127.0.0.1:6379> SISMEMBER set aaa 1 127.0.0.1:6379>…

go学习-指针 标识符

指针&#xff0c;以及标识符 1.指针 &#xff08;1&#xff09;.基本介绍 1&#xff09;基本数据类型&#xff0c;变量存的值&#xff0c;也叫值类型 2&#xff09;获取变量的地址用&&#xff0c;比如 var num int ,获取num的地址&#xff1a;&num 3)指针类型&…

Node基础--npm相关内容

下面,我们一起来看看Node中的至关重要的一个知识点-----npm 1.npm概述 npm(Node Package Manager),CommonJS包规范是理论,npm是其中一种实践。 对于Node而言,NPM帮助其完成了第三方模块的发布、安装和依赖等。借助npm,Node与第三方模块之间形成了很好的一个 生态系统。(类…

在驱动中创建sysfs接口、procfs接口、debugfs接口

前言 在一些linux开发板中&#xff0c;经常可以看到通过echo的方式来直接控制硬件或者修改驱动&#xff0c;例如&#xff1a; //灯灭 echo 0 >/sys/class/leds/firefly:blue:power/brightness //灯亮 echo 1 >/sys/class/leds/firefly:blue:power/brightness 这是怎么…