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;
            }
        }
    }

}

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

相关文章
|
4月前
|
存储 监控 算法
基于 C++ 哈希表算法实现局域网监控电脑屏幕的数据加速机制研究
企业网络安全与办公管理需求日益复杂的学术语境下,局域网监控电脑屏幕作为保障信息安全、规范员工操作的重要手段,已然成为网络安全领域的关键研究对象。其作用类似网络空间中的 “电子眼”,实时捕获每台电脑屏幕上的操作动态。然而,面对海量监控数据,实现高效数据存储与快速检索,已成为提升监控系统性能的核心挑战。本文聚焦于 C++ 语言中的哈希表算法,深入探究其如何成为局域网监控电脑屏幕数据处理的 “加速引擎”,并通过详尽的代码示例,展现其强大功能与应用价值。
98 2
|
5月前
|
存储 算法 调度
基于和声搜索优化算法的机器工作调度matlab仿真,输出甘特图
本程序基于和声搜索优化算法(Harmony Search, HS),实现机器工作调度的MATLAB仿真,输出甘特图展示调度结果。算法通过模拟音乐家即兴演奏寻找最佳和声的过程,优化任务在不同机器上的执行顺序,以最小化完成时间和最大化资源利用率为目标。程序适用于MATLAB 2022A版本,运行后无水印。核心参数包括和声记忆大小(HMS)等,适应度函数用于建模优化目标。附带完整代码与运行结果展示。
152 24
|
5月前
|
存储 算法 C++
Windows共享文件:探秘C++实现的B树索引算法奇境
在数字化时代,Windows共享文件的高效管理至关重要。B树算法以其自平衡多路搜索特性,在文件索引与存储优化中表现出色。本文探讨B树在Windows共享文件中的应用,通过C++实现具体代码,展示其构建文件索引、优化数据存储的能力,提升文件检索效率。B树通过减少磁盘I/O操作,确保查询高效,为企业和个人提供流畅的文件共享体验。
|
5月前
|
人工智能 自然语言处理 算法
阿里云 AI 搜索开放平台:从算法到业务——AI 搜索驱动企业智能化升级
本文介绍了阿里云 AI 搜索开放平台的技术的特点及其在各行业的应用。
592 3
|
6月前
|
存储 负载均衡 算法
基于 C++ 语言的迪杰斯特拉算法在局域网计算机管理中的应用剖析
在局域网计算机管理中,迪杰斯特拉算法用于优化网络路径、分配资源和定位故障节点,确保高效稳定的网络环境。该算法通过计算最短路径,提升数据传输速率与稳定性,实现负载均衡并快速排除故障。C++代码示例展示了其在网络模拟中的应用,为企业信息化建设提供有力支持。
163 15
|
6月前
|
运维 监控 算法
解读 C++ 助力的局域网监控电脑网络连接算法
本文探讨了使用C++语言实现局域网监控电脑中网络连接监控的算法。通过将局域网的拓扑结构建模为图(Graph)数据结构,每台电脑作为顶点,网络连接作为边,可高效管理与监控动态变化的网络连接。文章展示了基于深度优先搜索(DFS)的连通性检测算法,用于判断两节点间是否存在路径,助力故障排查与流量优化。C++的高效性能结合图算法,为保障网络秩序与信息安全提供了坚实基础,未来可进一步优化以应对无线网络等新挑战。
|
6月前
|
存储 算法 数据处理
公司局域网管理中的哈希表查找优化 C++ 算法探究
在数字化办公环境中,公司局域网管理至关重要。哈希表作为一种高效的数据结构,通过哈希函数将关键值(如IP地址、账号)映射到数组索引,实现快速的插入、删除与查找操作。例如,在员工登录验证和设备信息管理中,哈希表能显著提升效率,避免传统线性查找的低效问题。本文以C++为例,展示了哈希表在局域网管理中的具体应用,包括设备MAC地址与IP分配的存储与查询,并探讨了优化哈希函数和扩容策略,确保网络管理高效准确。
|
2月前
|
存储 搜索推荐 算法
加密算法、排序算法、字符串处理及搜索算法详解
本文涵盖四大类核心技术知识。加密算法部分介绍了对称加密(如 AES)、非对称加密(如 RSA)、哈希摘要(如 SHA-2)、签名算法的特点及密码存储方案(加盐、BCrypt 等)。 排序算法部分分类讲解了比较排序(冒泡、选择、插入、归并、快排、堆排序)和非比较排序(计数、桶、基数排序)的时间复杂度、适用场景及实现思路,强调混合排序的工业应用。 字符串处理部分包括字符串反转的双指针法,及项目中用正则进行表单校验、网页爬取、日志处理的实例。 搜索算法部分详解了二分查找的实现(双指针与中间索引计算)和回溯算法的概念(递归 + 剪枝),以 N 皇后问题为例说明回溯应用。内容全面覆盖算法原理与实践
117 0
|
2月前
|
存储 监控 算法
基于跳表数据结构的企业局域网监控异常连接实时检测 C++ 算法研究
跳表(Skip List)是一种基于概率的数据结构,适用于企业局域网监控中海量连接记录的高效处理。其通过多层索引机制实现快速查找、插入和删除操作,时间复杂度为 $O(\log n)$,优于链表和平衡树。跳表在异常连接识别、黑名单管理和历史记录溯源等场景中表现出色,具备实现简单、支持范围查询等优势,是企业网络监控中动态数据管理的理想选择。
60 0
|
3月前
|
存储 机器学习/深度学习 算法
基于 C++ 的局域网访问控制列表(ACL)实现及局域网限制上网软件算法研究
本文探讨局域网限制上网软件中访问控制列表(ACL)的应用,分析其通过规则匹配管理网络资源访问的核心机制。基于C++实现ACL算法原型,展示其灵活性与安全性。文中强调ACL在企业与教育场景下的重要作用,并提出性能优化及结合机器学习等未来研究方向。
89 4

热门文章

最新文章