25分钟详细解说c++搜索算法

简介: 🍀1理解搜索思路🍀2学会搜索模板
🏆今日学习目标:
🍀1理解搜索思路
🍀2学会搜索模板
✅创作者:贤鱼

请添加图片描述

🔥深度优先搜索

了解原理

==以深度为优先的搜索算法==,可以理解为一条路走到黑
图例解释
==现在需要从蓝色五角星走到红色五角星
在这里插入图片描述
理想走法:
这是理想走法
在这里插入图片描述
在这里插入图片描述
==很明显,这里直走到头已经走不了了,才会从之前的岔路拐弯(一路走到黑)==
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
==这就是深度搜索走迷宫的全过程==,当然,深度优先搜索不只是光能走迷宫,其他的例题后面会讲

方向数组

一般会定义两个数组

int dx[5]={0,1,-1,0,0}
int dy[5]={0,0,0,1,-1}
这里我一般喜欢让数组下标从1开始,所以第一个0只是顶替个位置
for(int i=1;i<=4;i++){
    int tx=dx[i]+x;
    int ty=dy[i]+y;
}
这里xy是原来的坐标,txty是走后的坐标,一般题目要求是上下左右四个方向走,如果要求斜方向也可以走方向数组会有些变化
int dx[8]={0,1,-1,0,0,1,-1,-1,1}
int dy[8]={0,0,0,1,-1,1,-1,1,-1}

函数

函数的类型在本章需要的主要有两种:
==int==类型和==void==类型
前者有返回值,可以处理各种类型的题目,后者没有返回值,常用于走迷宫一类的题。

递归

还是看上方的图,只有走到死路的时候会往前走其他的路,这个过程就是递归的过程

🍀套用模板

void dfs(int x,int y){
if(x==xx&&y==yy)//到终点了
    return;//void类型返回值为空
for(int i=1;i<=4;i++){
    int tx=dx[i]+x;
    int ty=dy[i]+y;
    if() continue//这里判断有没有出界,有没有走过,有没有碰到墙之类的
    //如果没有就继续
    vis[tx][ty]=1//记录一下走没走过,避免重复走,如果不记录会死循环,上下上下不停地走
    dfs(tx,ty);
}
}

🔥广度优先搜索

==以广度为优先的搜索==,可以理解为在每一步的时候处理所有的可能性
还是来看看图:
在这里插入图片描述
可以看到这里遇到了岔路
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
我们在这里同时处理

了解原理

队列

==特点== 先进先出:可以理解为一个联通的钢管,先放进去的部分先掉下来

手打队列

void bfs(){
    head=0;tail=1;//这里是记录头和尾的坐标,如果t加1,也就是入队的过程,如果h加1,就是出队的过程
    qw[0][0]=1;
    a[tail]=0,b[tail]=0;
    while(tail!=head){
        head++;
        for(int i=1;i<=4;i++){//下面部分基本一样
            int tx=a[head]+dx[i];
            int ty=b[head]+dy[i];
            if() continue;
            tail++;
            a[tail]=tx;//这里入队并且记录数据
            b[tail]=ty;
            qw[tx][ty]=1;//避免走重复,和上文一样,避免死循环,不过广搜不是很影响
            if(到终点){
                return;
            }
        }
    }
}

queue

struct aaa{
    int x,y;
};//记录一下结构体,具体下面有介绍
void bfs(){
    vis[x][y]=1;
    dis[x][y]=0;
    queue <aaa> q;//aaa是结构体的类型,这句话的意思是定义一个类型为aaa的队列
    q.push((aaa){x,y});//入队的意思,第一个括号写类型,因为结构体是aaa类型,xy是int类型,后面是入队数据
    while(!q.empty()){//这句话的意思是当队列不为空(empty是为空的意思,!取反)
        aaa a;//定义一个aaa类型的变量a
        a=q.front();//这个意思是取出队首元素,也就是队列中最先进去的
        q.pop();//取出队首元素后出队,将已经取出的元素扔掉
        for(int i=1;i<=4;i++){
            int tx=a.x+dx[i];
            int ty=a.y+dy[i];
            if() continue;
            q.push((aaa){tx,ty});//入队的意思,和上文h,t作用一样
            vis[tx][ty]=1;//记录路径,避免重复
            if(到终点){
                return;
            }
        }

    }
    return ;

}

结构体

struct aaa{
    int x,y;
};
aaa a;//定义一个aaa类型的a
a.x;
a.y;这样可以方便记录数据
a[i],b[i];当然,这样子记录xy坐标也是可以的,但是有些麻烦

🍀套用模板

void bfs(){
    入队
    while(队列不为空){
        取出队首元素
        出队
        for(1 to 4){
            和上文深搜走迷宫一样
            如果可以走{
                入队元素
            }
            如果到终点{
                return;
            }
        }
    }

}

==🏆结束语== 搜索不光可以走迷宫,其他具体的题目题解可以看到专栏内容
请添加图片描述

相关文章
|
1天前
|
算法
基于SOA海鸥优化算法的三维曲面最高点搜索matlab仿真
本程序基于海鸥优化算法(SOA)进行三维曲面最高点搜索的MATLAB仿真,输出收敛曲线和搜索结果。使用MATLAB2022A版本运行,核心代码实现种群初始化、适应度计算、交叉变异等操作。SOA模拟海鸥觅食行为,通过搜索飞行、跟随飞行和掠食飞行三种策略高效探索解空间,找到全局最优解。
|
1月前
|
负载均衡 算法 安全
探秘:基于 C++ 的局域网电脑控制软件自适应指令分发算法
在现代企业信息化架构中,局域网电脑控制软件如同“指挥官”,通过自适应指令分发算法动态调整指令发送节奏与数据量,确保不同性能的终端设备高效运行。基于C++语言,利用套接字实现稳定连接和线程同步管理,结合实时状态反馈,优化指令分发策略,提升整体管控效率,保障网络稳定,助力数字化办公。
52 19
|
1月前
|
存储 算法 测试技术
【C++数据结构——树】二叉树的遍历算法(头歌教学实验平台习题) 【合集】
本任务旨在实现二叉树的遍历,包括先序、中序、后序和层次遍历。首先介绍了二叉树的基本概念与结构定义,并通过C++代码示例展示了如何定义二叉树节点及构建二叉树。接着详细讲解了四种遍历方法的递归实现逻辑,以及层次遍历中队列的应用。最后提供了测试用例和预期输出,确保代码正确性。通过这些内容,帮助读者理解并掌握二叉树遍历的核心思想与实现技巧。
49 2
|
2月前
|
存储 算法 安全
基于红黑树的局域网上网行为控制C++ 算法解析
在当今网络环境中,局域网上网行为控制对企业和学校至关重要。本文探讨了一种基于红黑树数据结构的高效算法,用于管理用户的上网行为,如IP地址、上网时长、访问网站类别和流量使用情况。通过红黑树的自平衡特性,确保了高效的查找、插入和删除操作。文中提供了C++代码示例,展示了如何实现该算法,并强调其在网络管理中的应用价值。
|
1月前
|
存储 算法 安全
基于哈希表的文件共享平台 C++ 算法实现与分析
在数字化时代,文件共享平台不可或缺。本文探讨哈希表在文件共享中的应用,包括原理、优势及C++实现。哈希表通过键值对快速访问文件元数据(如文件名、大小、位置等),查找时间复杂度为O(1),显著提升查找速度和用户体验。代码示例展示了文件上传和搜索功能,实际应用中需解决哈希冲突、动态扩容和线程安全等问题,以优化性能。
|
2月前
|
算法 安全 C++
用 C++ 算法控制员工上网的软件,关键逻辑是啥?来深度解读下
在企业信息化管理中,控制员工上网的软件成为保障网络秩序与提升办公效率的关键工具。该软件基于C++语言,融合红黑树、令牌桶和滑动窗口等算法,实现网址精准过滤、流量均衡分配及异常连接监测。通过高效的数据结构与算法设计,确保企业网络资源优化配置与安全防护升级,同时尊重员工权益,助力企业数字化发展。
65 4
|
3月前
|
算法 搜索推荐 数据库
二分搜索:高效的查找算法
【10月更文挑战第29天】通过对二分搜索的深入研究和应用,我们可以不断挖掘其潜力,为各种复杂问题提供高效的解决方案。相信在未来的科技发展中,二分搜索将继续发挥着重要的作用,为我们的生活和工作带来更多的便利和创新。
81 1
|
4月前
|
算法 决策智能
基于禁忌搜索算法的VRP问题求解matlab仿真,带GUI界面,可设置参数
该程序基于禁忌搜索算法求解车辆路径问题(VRP),使用MATLAB2022a版本实现,并带有GUI界面。用户可通过界面设置参数并查看结果。禁忌搜索算法通过迭代改进当前解,并利用记忆机制避免陷入局部最优。程序包含初始化、定义邻域结构、设置禁忌列表等步骤,最终输出最优路径和相关数据图表。
|
5月前
|
存储 算法 安全
超级好用的C++实用库之sha256算法
超级好用的C++实用库之sha256算法
204 1
|
5月前
|
大数据 UED 开发者
实战演练:利用Python的Trie树优化搜索算法,性能飙升不是梦!
在数据密集型应用中,高效搜索算法至关重要。Trie树(前缀树/字典树)通过优化字符串处理和搜索效率成为理想选择。本文通过Python实战演示Trie树构建与应用,显著提升搜索性能。Trie树利用公共前缀减少查询时间,支持快速插入、删除和搜索。以下为简单示例代码,展示如何构建及使用Trie树进行搜索与前缀匹配,适用于自动补全、拼写检查等场景,助力提升应用性能与用户体验。
86 2