C++ bfs 的状态表示(六十二)【第九篇】

今天我们来学习一下bfs的复杂状态表示

1.bfs状态表示

无论是深度优先搜索还是广度优先搜索,搜索的过程均会建立一棵 搜索树,搜索树上的每一个结点都是一个 状态,而搜索的过程又可以看作是 状态的转移。

对于 BFS,搜索过程中产生的状态一般会使用一个结构体存储。例如下方代码中,使用结构体表示到达 x 的最短距离为 dis 的状态。

struct node {int x, dis;
};

这节课我们会学习一些复杂状态表示方法。

我们之前已经接触过了迷宫问题,也利用 DFS、BFS 求解过迷宫问题的最短路。

这里我们接着研究更复杂一点的迷宫问题——带钥匙的迷宫。

带钥匙的迷宫就是在迷宫中除了起点、终点、障碍外还有钥匙,你需要从起点出发,取得钥匙,到达终点。我们常常求解的是带钥匙迷宫的最短路,也就是从起点去拿钥匙再到终点最少需要走多少步。

图片

同学们可以思考一下,这个问题可以如何解决呢?

相比于普通的迷宫问题,我们就是多了钥匙这个因素,也就是说对于在同一个点的情况,现在手上有没有钥匙,对于后边是不一样的。

那我们就可以在表示状态的时候相比之前增加一维,表示现在有没有钥匙,此时的状态为 (x,y,status) ,表示目前我们在 (x,y) 这个点,目前有没有钥匙。其中 status 为 0 表示没有钥匙,为 
1 表示有钥匙。

设起点为 (sx,sy) 那么初始状态就是 
(sx,sy,0) ,每一次往一个方向走的时候,看这一位走到后是不是钥匙,如果是那 
status 就变成 
1 ,否则 
status 就保持原样。

注意此时 
vis 数组或者 
dis 数组都需要是三维的,第三维就是 status 。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

计算机设计大赛 深度学习人体跌倒检测 -yolo 机器视觉 opencv python

0 前言 🔥 优质竞赛项目系列,今天要分享的是 🚩 **基于深度学习的人体跌倒检测算法研究与实现 ** 该项目较为新颖,适合作为竞赛课题方向,学长非常推荐! 🥇学长这里给一个题目综合评分(每项满…

P6354 [COCI2007-2008#3] TAJNA

题目传送门 题目描述 使用一种加密算法。 设字符串的长度为 n,则构造一个矩阵,使得 rcn 且在 r≤c 的情况下使得 r 尽量大。 然后把给定的明文按照由上到下,从左到右的顺序填充这个 rc 的矩阵。 得到的密文就是把矩阵按照从左到右&#…

内存计算研究进展- 针对图计算的近数据计算架构

针对图计算的近数据计算架构的代表性工作有: Seoul National University的 Tesseract和 Georgia Institute of Technology 的 GraphPIM,具体如下。 1 Tesseract Tesseract是一个针对图计算的可编程的内存计算系统架构,它综合了图计算的特点&…

VMware的三种连接模式

桥接模式 就是将主机网卡与虚拟机虚拟的网卡利用虚拟网桥进行通信。在桥接的作用下,类似于把物理主机虚拟为一个交换机,所有桥接设置的虚拟机连接到这个交换机的一个接口上,物理主机也同样插在这个交换机当中,所以所有桥接下的网…

weblog项目开发记录--SpringBoot后端工程骨架

知识点查漏补缺 跟着犬小哈做项目实战时发现好多知识点都忘了,还有一些小的知识点可能之前没学过,记录下!顺带整理下开发流程。 完整项目学习见犬小哈实战专栏 SpringBoot后端工程骨架 搭建好的工程骨架中实现了很多基础功能,…

如何在同一个module里面集成多个数据库的多张表数据

确保本公司数据安全,通常对数据的管理采取很多措施进行隔离访问。 但是,Mendix应怎样访问散布于异地的多个数据库呢? 前几期我们介绍过出海跨境的大企业对于Mendix的技术、人才的诉求后,陆陆续续有其他客户希望更聚焦具体的实际场…

量子计算:数据安全难题

当今数字技术面临的最大挑战之一是安全系统和数据。为此,人们设计了复杂的算法来加密数据并通过称为对称加密的框架来保护数据。虽然这已被证明是成功的,但量子计算的进步(利用量子力学比传统计算机更快地解决复杂问题)可能会彻底…

【Pytorch 基础教程2】10分钟掌握Tensor基础 VSCode +Pytorch配置

Pytorch 基础教程 02 Tensor PyTorch 作为Numpy的代替品,可以使用GPU的强大计算能力 提供最大的灵活性和告诉的深度学习研究平台 这里补充上实验环境调试:第一次使用VS Code可以参考:PyTorch(超详细)部署与激活 举起Py…

优先队列C

由于看到P1629 邮递员送信这题,就去学了优先队列.为学习Dijkstra算法做准备 什么是优先队列 优先队列:是一种特殊类型的队列,每个元素都有一个相关的优先级。在优先队列中,元素按照优先级的顺序进行排列,具有最高(或最低&#x…

Prometheus 教程

目录 一、简介二、下载安装1、安装 prometheus2、安装 alertmanager3、安装 grafana4、安装 node_exporter5、安装 mysqld_exporter 一、简介 Prometheus 是一个开源的系统监控和警报工具。它最初由 SoundCloud 开发,并于 2012 年发布为开源项目。Prometheus 专注于…

利用vite快速搭建vue3项目

1、选择一个文件夹,在vscode终端打开,输入命令【npm create vitelatest】 npm create vitelatest 2、提示你输入项目名称之后,我这里设置的是【rookiedemo】 3、回车之后,出现选择框架的提示,我们选择【vue】回车 4、…

js中使用for in注意事项,key的类型为string类型

for in是一个非常实用的存在,既可以遍历数组,又可以遍历对象,所以我一般都是会用来遍历可迭代的数据,遍历数组和对象的时候,要注意使用万能遍历方式: const users [1, 3, 45, 6]// const users {// 1…

Polyspace静态检测步骤

Polyspace 是一个代码静态分析和验证的工具,隶属于MATLAB,用于检测代码中的错误和缺陷,包括内存泄漏、数组越界、空指针引用等。帮助开发团队提高代码质量,减少软件开发过程中的错误和风险。 1、打开MATLAB R2018b 2、找到Polys…

AR智能眼镜主板硬件设计_AR眼镜光学方案

AR眼镜凭借其通过导航、游戏、聊天、翻译、音乐、电影和拍照等交互方式,将现实与虚拟进行无缝融合的特点,实现了更加沉浸式的体验。然而,要让AR眼镜真正成为便捷实用的智能设备,需要解决一系列技术难题,如显示、散热、…

Stable Diffusion 绘画入门教程(webui)-图生图

通过之前的文章相信大家对文生图已经不陌生了,那么图生图是干啥的呢? 简单理解就是根据我们给出的图片做为参考进行生成图片。 一、能干啥 这里举两个例子 1、二次元头像 真人转二次元,或者二次元转真人都行, 下图为真人转二次…

小清新卡通人物404错误页面源码

小清新卡通人物404错误页面源码由HTMLCSSJS组成,记事本打开源码文件可以进行内容文字之类的修改,双击html文件可以本地运行效果,也可以上传到服务器里面,重定向这个界面 蓝奏云:https://wfr.lanzout.com/i6XbU1olftde

二叉树(6)——二叉树的创建和销毁

1 二叉树的创建 整体思路 将数组里的元素一直分为根,左子树,右子树,遇到#就返回NULL,链接到上层递归的左子树或者右子树,一定要把一个节点的左子树全部递归完才能返回到右子树。这种方法也可以scanf一个数组里的元素&…

Spring Boot项目怎么对System.setProperty(key, value)设置的属性进行读取加解密

一、前言 之前我写过一篇文章使用SM4国密加密算法对Spring Boot项目数据库连接信息以及yaml文件配置属性进行加密配置(读取时自动解密),对Spring Boot项目的属性读取时进行加解密,但是没有说明对System.setProperty(key, value)设…

Docker Compose映射卷的作用是什么,dockerfile这个文件有什么区别和联系?

Docker Compose中映射卷(Volumes)的作用和Dockerfile之间既有区别也有联系。下面详细解释两者的作用、区别和联系: Docker Compose映射卷的作用 在Docker Compose中,卷(Volumes)用于数据持久化和数据共享…

【实战 JS逆向+python模拟获取+Redis token会话更新】实战模拟测试 某巴批发网 仅供学习

逆向日期:2024.02.20 使用工具:Node.js、python、Redis 加密方法:md5标准库 文章全程已做去敏处理!!! 【需要做的可联系我】 AES解密处理(直接解密即可)(crypto-js.js 标…