【详细介绍下图搜索算法】

在这里插入图片描述

🎥博主:程序员不想YY啊
💫CSDN优质创作者,CSDN实力新星,CSDN博客专家
🤗点赞🎈收藏⭐再看💫养成习惯
✨希望本文对您有所裨益,如有不足之处,欢迎在评论区提出指正,让我们共同学习、交流进步!

在这里插入图片描述

🏆图搜索算法

💥图搜索算法是用于在图中搜索从起始节点到目标节点的路径的算法。其核心思想是逐渐探索图,直到找到所需的路径。这里有几种常用的图搜索算法:

🏆1. 深度优先搜索 (DFS)
💥深度优先搜索是一种利用回溯思想的搜索算法,它尝试尽可能深地搜索每一条路径。DFS 采用栈来实现搜索过程,通常用递归很容易实现。

🔥算法步骤如下:
🔥a) 从起始节点开始。
🔥b) 访问当前节点,并将其标记为已访问。
🔥c) 对当前节点的所有未访问的邻接节点,递归地调用DFS。
🔥d) 如果路径不存在,回溯到上一个节点。

🏆2. 广度优先搜索 (BFS)
💥 广度优先搜索是一层一层地进行搜索,先搜索离起点最近的节点。BFS 采用队列来实现搜索过程。

🔥算法步骤如下:
🔥a) 创建一个队列 Q,并将起始节点放入队列。
🔥b) 当 Q 不为空时,做以下操作:
   🔥i) 从 Q 中移除第一个节点(称为“当前节点”)。
   🔥ii) 访问当前节点,并将其标记为已访问。
   🔥iii) 将当前节点的所有未访问过的邻接节点加入到 Q 中。

🏆3. A 搜索算法*
💥 A* 是一种启发式搜索算法,它结合了BFS的部分思想和代价评估。A* 选择路径似乎最接近目标的节点来展开。

🔥算法步骤如下:
🔥a) 初始化一个优先队列(开放列表),将起始节点放入其中,并计算其评估函数 f(n) = g(n) + h(n),其中 g(n) 是起始节点到当前节点的实际成本,h(n) 是当前节点到目标的预估成本(启发式函数)。
🔥b) 当优先队列不为空时,做以下操作:
   🔥i) 从队列中取出 f(n) 最小的节点(称为“当前节点”)。
   🔥ii) 如果当前节点就是目标节点,返回成功并回溯路径。
   🔥iii) 否则将当前节点移出队列,考察它的所有邻居,并为每一个邻居更新 f(n) 值,再放入优先队列。

🏆4. 迭代加深搜索 (IDS)
💥 IDS 结合了深度优先搜索的空间效率和广度优先搜索的完备性(总是能找到一个解)。它通过限制深度进行重复的深度优先搜索。

🔥算法步骤如下:
🔥a) 对于深度限制从 0 开始逐渐增加的每一个值 d:
   🔥i) 执行深度限制为 d 的深度优先搜索。
   🔥ii) 如果在当前深度没有找到目标,则增加深度限制,重复搜索。

💥每种算法都有其适应的场景和优缺点。例如,DFS适用于空间受限的情况,而BFS可以快速找到最短路径,A* 则在知道某些启发式信息时效率更高。在选择算法时,需要根据实际应用的需求和图的特性来做出决定。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/555519.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Golang入门基础

文章目录 Golang的背景知识Golang的发展历程Golang的特点Golang的应用领域 开发环境搭建下载并安装SDK包设置环境变量Go项目目录结构 注释变量标识符命名输入和输出运算符算术运算符关系运算符逻辑运算符赋值运算符位运算符其他运算符 Golang的背景知识 Golang的发展历程 Gola…

高仿小米商城用户端

高仿小米商城用户端(分为商城前端(tongyimall-vue)和商城后端(tongyimall-api)两部分),是Vue SpringBoot的前后端分离项目,用户端包括首页门户、商品分类、首页轮播、商品展示、商品推荐、购物车、地址管理、下订单、扫码支付等功能模块。 …

Docker Volume (存储卷)

什么是存储卷? 存储卷就是将宿主机的本地文件系统中存在的某个目录直接与容器内部的文件系统上的某一目录建立绑定关系。这就意味着,当我们在容器中的这个目录下写入数据时,容器会将其内容直接写入到宿主机上与此容器建立了绑定关系的目录。在宿主机上…

「51媒体」权重高新闻源央级媒体邀约资料有哪些?

传媒如春雨,润物细无声,大家好,我是51媒体网胡老师。 权重高的央级媒体邀约资源包括了中国一些最具影响力和权威性的新闻机构。具体如下: 人民日报:作为中国共产党中央委员会的机关报,人民日报具有极高的权…

openEuler-23.03下载

下载地址:openEuler下载 | 欧拉系统ISO镜像 | openEuler社区官网 下载版本:openEuler-23.03-x86_64-dvd.iso

生产者,消费者,队列缓冲区,线程

public class CustomQueue {private BlockingQueue<Integer> queue;public CustomQueue() {// 初始化一个容量为1的阻塞队列queue new LinkedBlockingQueue<>(1);}public void put(int num) throws InterruptedException {// 将数字放入队列queue.put(num);}publi…

给一个新项目配置conda环境的完整流程

创建环境&#xff0c;并指定python的版本&#xff0c;我这边指定为3.7&#xff1a; conda create --name [自定义的环境名] python3.7我这边假定我的环境名为grand&#xff1a; conda create --name grand python3.7创建成功后&#xff0c;初始化一下conda&#xff1a; source …

Google DeepMind: Many-Shot vs. Few-Shot

本文介绍了如何通过增大上下文窗口&#xff0c;利用大型语言模型&#xff08;LLMs&#xff09;进行多实例上下文学习&#xff08;Many-Shot In-Context Learning&#xff0c;ICL&#xff09;的方法。主要描述了现有的几实例上下文学习方法虽然在推理时能够通过少量例子学习&…

基于Java+SpringBoot+vue动物救助平台设计和实现

基于JavaSpringBootvue动物救助平台设计和实现 &#x1f345; 作者主页 央顺技术团队 &#x1f345; 欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; &#x1f345; 文末获取源码联系方式 &#x1f4dd; &#x1f345; 查看下方微信号获取联系方式 承接各种定制系统 &#…

树莓派使用总结

手上拿到了一块Raspberry Pi 4B板子。研究一下怎么用。 安装系统 直接到官网【Raspberry Pi 】下载在线安装助手 安装好后&#xff0c;打开软件&#xff0c;选择好板子型号、系统、TF卡&#xff0c;一路下一步就行。 树莓派接口 直接查看官方的资料【Raspberry Pi hardwar…

基础算法之二分算法

前言 本次博客&#xff0c;将要介绍二分算法的基本原理以及如何使用&#xff0c;深入浅出 二分可以针对整型以及浮点型接下来对其讲解希望对小白有所帮助吧 整型的二分法 一般要在一个数组中猜出一个数是否存在我们可以遍历一遍整个数组&#xff0c;判断是否存在&#xff0…

Java面向对象编程

标题&#xff1a;Java面向对象编程 文章目录 标题&#xff1a;Java面向对象编程前言&#xff1a;面向对象的三条主线一、面向对象编程概述1.1 程序设计思路1.2 Java语言的基本元素&#xff1a;类和对象1.3 对象的内存解析 二、类的成员1—成员变量2.1 “变量”定义&分类2.2…

蓝桥杯备赛

关闭同步流&#xff1a; ios::sync_with_stdio(0);cin.tie(0);cout.tie(0); 注意数据范围&#xff1a;数据范围较大时干脆所有变量类型都定义成longlong等。 stl&#xff1a; sort函数 时间复杂度为nlog(n); sort(数组指针&#xff0c;从指针开始多少个数&#xff0c;great…

如何辨别:DNS污染or DNS劫持?

DNS劫持和DNS污染的情况在互联网中并不少见&#xff0c;到底是出现了DNS污染还是DNS劫持。什么是DNS污染&#xff1f;什么是DNS劫持&#xff1f;我们该如何辨别DNS污染和DNS劫持&#xff1f; DNS劫持&#xff1a; DNS 劫持是指恶意攻击者通过非法手段篡改了网络中的 DNS 服务…

HTML快速入门

HTML简介 HTML&#xff08;超文本标记语言&#xff09;是一种用于创建网页和Web应用程序的标记语言。它由一系列标签组成&#xff0c;每个标签通过尖括号来定义&#xff0c;并用于标记文本、图像、链接和其他内容。HTML标签描述了网页中的信息结构和布局&#xff0c;并定义了文…

[MySQL数据库] 索引与事务

1. 索引 1.1 概念 索引是一种特殊的文件&#xff0c;包含着对数据表里所有记录的引用指针.可以对表中的一列或多列创建索引,并指定索引的类型&#xff0c;各类索引有各自的数据结构实现. 1.2 作用 数据库中的表、数据、索引之间的关系&#xff0c;类似于书架上的图书、书籍…

【Redis】面试题汇总

Redis什么是Redis、使用场景有哪些Redis 为什么这么快&#xff1f;Redis 数据类型及使用场景五种常见的 Redis 数据类型是怎么实现&#xff1f;Redis是单线程吗Redis 采用单线程为什么还这么快&#xff1f;Redis 如何实现数据不丢失&#xff1f;Redis 如何实现服务高可用&#…

【复习笔记】FreeRTOS(六) 队列操作

本文是FreeRTOS复习笔记的第六节&#xff0c;队列操作。 上一篇文章&#xff1a; 【复习笔记】FreeRTOS(五)时间片调度 文章目录 1.队列操作1.1.队列操作过程1.2.队列操作常用的API函数 二、实验设计三、测试例程四、实验效果 1.队列操作 队列是为了任务与任务、任务与中断之间…

极狐GitLab x LigaAI,AI 时代研发提效新范式

GitLab 是一个全球知名的一体化 DevOps 平台&#xff0c;很多人都通过私有化部署 GitLab 来进行源代码托管。极狐GitLab 是 GitLab 在中国的发行版&#xff0c;专门为中国程序员服务。可以一键式部署极狐GitLab。 近日&#xff0c;极狐GitLab 和 LigaAI 宣布合作&#xff0c;双…

分布式锁设计

一、为什么需要分布式锁 1.1 单体项目同步实现 在单进程&#xff08;启动一个jvm&#xff09;的系统中&#xff0c;当存在多个线程可以同时改变某个变量&#xff08;可变共享变量&#xff09;时&#xff0c;就需要对变量或代码块做同步&#xff0c;使其在修改这种变量时能够线…