当前位置: 首页 > news >正文

广度优先(BFS)(例子:迷宫)

       广度优先搜索算法(BFS)是一种用于图形和树数据结构的搜索算法。该算法从根节点开始搜索,然后依次访问每个相邻节点。在搜索过程中,每个节点都标记为已访问,以避免重复访问。BFS算法适用于寻找最短路径的问题,因为它保证找到的解是距离根节点最近的解。

       BFS算法的基本思想是使用队列保存已经访问的节点。首先将根节点入队,然后从队列中取出一个节点进行访问,并将与该节点相邻的未访问节点入队。重复这个过程,直到队列为空为止。BFS算法的时间复杂度为O(V+E),其中V为节点数,E为边数。

#include<iostream>//广度搜索,迷宫例题
using namespace std;
typedef struct node
{int x;int y;int f;int s;
};
int main()
{node que[2501];int a[51][51] = { 0 };//储存地图int book[51][51] = { 0 };//标记是否走过int next[4][2] = { {0,1},{1,0},{0,-1},{-1,0} };//右,下,左,上int head, tail;int x, y, q, p,n,m,tx,ty;cout << "输入地图规模:" << endl;cin >> n >> m;//输入地图规模for (int i = 1; i <= n; i++)for (int j = 1; j <= m; j++)cin >> a[i][j];cout << "输入起点、终点:" << endl;cin >> x >> y >> q >> p;//输入起点,终点head = 1, tail = 1;que[tail].x = x;que[tail].y = y;que[tail].f = 0;que[tail].s = 0;tail++;book[x][y] = 1;int flag = 0;//标记是否到达终点while (head < tail){for (int k = 0; k < 4; k++){tx = que[head].x + next[k][0];ty = que[head].y + next[k][1];if (tx<1 || tx>n || ty < 1 || ty>n)continue;if (a[tx][ty] == 0 && book[tx][ty] == 0)//没有障碍物且没走过{book[tx][ty] = 1;//标记已经走过que[tail].x = tx;que[tail].y = ty;que[tail].f = head;que[tail].s = que[head].s + 1;tail++;}if (tx == q && ty == p){flag = 1;break;}}if (flag == 1)break;head++;}cout << que[tail - 1].s;
}

相关文章:

广度优先(BFS)(例子:迷宫)

广度优先搜索算法&#xff08;BFS&#xff09;是一种用于图形和树数据结构的搜索算法。该算法从根节点开始搜索&#xff0c;然后依次访问每个相邻节点。在搜索过程中&#xff0c;每个节点都标记为已访问&#xff0c;以避免重复访问。BFS算法适用于寻找最短路径的问题&#xff0…...

【安卓源码】安卓Watchdog 机制

在Android系统中&#xff0c;也设计了一个软件层面Watchdog&#xff0c;用于保护一些重要的系统服务&#xff0c;比如&#xff1a;AMS、WMS、PMS等&#xff0c;由于以上核心服务运行在system_server进程里面&#xff0c;所以当以上服务出现异常时&#xff0c;通常会将system_se…...

inscode连接不上gpu,持续8小时,为了数据不丢失续费了6小时,我只想知道什么时候可以连接

并且给我相应的补偿...

QT位置相关函数

Qt&#xff08;Qt Framework&#xff09;是一个流行的C应用程序开发框架&#xff0c;提供了丰富的位置相关函数和类&#xff0c;用于处理窗口、窗口小部件和图形的位置和几何操作。以下是一些常用的Qt位置相关函数和类&#xff1a; QPoint&#xff1a;QPoint类表示一个二维点的…...

vulnhub靶场 Kioptrix-level-1

简介&#xff1a; vulnhub是一个提供靶场环境的平台。而Kioptrix-level-1就是一个对新手比较友好的靶场。初学渗透的同学可以做做试试看&#xff0c;项目地址如下。 项目地址&#xff1a;Kioptrix: Level 1 (#1) ~ VulnHub 信息收集 查看本机IP&#xff0c;靶机跟kali都是使用…...

全网最细,真实企业性能测试落地实施,一文带你快速打通...

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 1、什么是性能测试…...

三十一、【进阶】B+树的演变过程

1、B树简单介绍 &#xff08;1&#xff09;介绍&#xff1a;B树也属于B树&#xff0c;是B树的变种 &#xff08;2&#xff09;特点&#xff1a;所有的数据都位于叶子节点上&#xff0c;叶子节点上的所有元素形成了一个单项链表 &#xff08;3&#xff09;图示&#xff1a; 2…...

算法通过村第十三关-术数|白银笔记|术数高频问题

文章目录 前言数组实现加法专题数组实现整数加法字符串加法二进制加法 幂运算专题求2的次幂求3的次幂求4的次幂 总结 前言 提示&#xff1a;人心本易趋死寂&#xff0c;苦难之后&#xff0c;焕然重建&#xff0c;激荡一阵&#xff0c;又趋麻木。 --苏枕书《有鹿来》 我们继续看…...

Java 线程的生命周期

&#x1f648;作者简介&#xff1a;练习时长两年半的Java up主 &#x1f649;个人主页&#xff1a;程序员老茶 &#x1f64a; ps:点赞&#x1f44d;是免费的&#xff0c;却可以让写博客的作者开兴好久好久&#x1f60e; &#x1f4da;系列专栏&#xff1a;Java全栈&#xff0c;…...

Vue页面监听键盘按键的多种方法

在Vue页面中&#xff0c;可以使用多种方法来监听键盘按键。以下是至少五种常用的方法&#xff1a; 使用keydown或keyup指令来绑定键盘按键事件。 <template><div><input type"text" keydown.enter"handleEnterKey" /></div> <…...

解析硬件连通性测试的重要性及测试方法

在现代科技世界中&#xff0c;硬件设备的复杂性和多样性已经达到了前所未有的水平。无论是计算机、智能手机、物联网设备还是嵌入式系统&#xff0c;各种硬件组件的协同工作对于设备的正常运行至关重要。硬件连通性测试是确保这些组件相互配合无误的重要步骤。 一、硬件连通性测…...

Hive窗口函数回顾

1.语法 1.1 基于行的窗口函数 Hive的窗口函数分为两种类型&#xff0c;一种是基于行的窗口函数&#xff0c;即将某个字段的多行限定为一个范围&#xff0c;对范围内的字段值进行计算&#xff0c;最后将形成的字段拼接在该表上。 注意&#xff1a;在进行窗口函数计算之前&#…...

flink自定义窗口分配器

背景 我们知道处理常用的滑动窗口分配器&#xff0c;滚动窗口分配器&#xff0c;全局窗口分配器&#xff0c;会话窗口分配器外&#xff0c;我们可以实现自己的自定义窗口分配器&#xff0c;以实现我们的自己的窗口逻辑 自定义窗口分配器的实现 package wikiedits.assigner;i…...

iOS CGRect CGPoint NSRange等结构体的NSLog打印输出

iOS的UIKit里提供了UIGeometry.h内有各结构体转换成NSString的方法&#xff0c;可用于打印输出&#xff1b; UIKIT_EXTERN NSString *NSStringFromCGPoint(CGPoint point); UIKIT_EXTERN NSString *NSStringFromCGVector(CGVector vector); UIKIT_EXTERN NSString *NSStringFr…...

Viper FTP Mac/ftp管理工具

Viper FTP 是一个用于文件传输和管理的 Mac 应用程序。它允许用户上传、下载和管理远程服务器上的文件&#xff0c;以及在不同本地文件夹之间传输文件。 Viper FTP 支持广泛的文件传输协议&#xff0c;包括 FTP、SFTP、WebDav、Amazon S3、Google Drive 等。它还包括文件同步、…...

web漏洞-xml外部实体注入(XXE)

web漏洞-xml外部实体注入&#xff08;XXE&#xff09; 目录 web漏洞-xml外部实体注入&#xff08;XXE&#xff09;概念危害检测方法利用方法漏洞利用xxe-lab有回显情况无回显情况 pikachu靶场有回显内容无回显 修复方案 概念 xml可拓展标记语言&#xff1a; xml是一种可拓展的标…...

Impeller-Flutter的新渲染引擎

Impeller是什么&#xff1f;它本质上是怎样运行的&#xff1f; Impeller是Flutter的新的渲染引擎&#xff0c;直到现在Flutter正在用一个叫做Skia的渲染引擎。 问题是Skia不是为了Flutter量身定做的。它有为范围广阔的设备构建的一大堆的渲染特性&#xff0c;这意味着它并不总…...

python 面试算法题

1.第一题 题目描述:给定两个字符串, s 和 goal。如果在若干次旋转操作之后&#xff0c;s 能变成 goal &#xff0c;那么返回 true 。 s 的 旋转操作 就是将 s 最左边的字符移动到最右边。 例如, 若 s abcde&#xff0c;在旋转一次之后结果就是bcdea 。 示例一: 输入: s &quo…...

Python中的yield关键字

基本概念 yield 是 Python 中的一个关键字&#xff0c;主要在定义生成器函数时使用。使用 yield 的函数在调用时返回一个特殊的迭代器&#xff0c;称为生成器。不同于常规的函数返回一个单一的值&#xff08;如数字、字符串或其他对象&#xff09;&#xff0c;带有 yield 的函…...

怎么压缩pdf文件?分享缩小pdf文件的简单方法

在我们的日常生活和工作中&#xff0c;往往需要处理大量的PDF文件&#xff0c;而很多时候这些文件的大小会成为传输和存储的难题。为了解决这个问题&#xff0c;下面我们将介绍三种方法来压缩PDF文件&#xff0c;一起来看看吧~ 一、嗨格式压缩大师 首先&#xff0c;最简单也是…...

别只盯着PID!用STM32的PWM差速控制,让你的循迹小车转弯更稳(附源码分析)

STM32 PWM差速控制&#xff1a;让循迹小车转弯更稳的实战技巧 循迹小车的核心挑战之一是如何实现平滑稳定的转弯控制。许多开发者习惯性地直接套用PID算法&#xff0c;却忽略了更基础的PWM差速控制策略。实际上&#xff0c;通过精心设计的PWM占空比调整方案&#xff0c;完全可以…...

3步搞定飞书文档批量导出:告别手动复制粘贴的终极解决方案

3步搞定飞书文档批量导出&#xff1a;告别手动复制粘贴的终极解决方案 【免费下载链接】feishu-doc-export 飞书文档导出服务 项目地址: https://gitcode.com/gh_mirrors/fe/feishu-doc-export 还在为飞书文档的迁移备份而烦恼吗&#xff1f;每次需要导出几十上百个文档…...

【数据结构与算法】树,森林,二叉树之间的转换

树的定义&#xff08;递归定义&#xff09;树是满足以下条件的结构&#xff1a;有且仅有一个根节点&#xff08;没有父节点的节点&#xff09;其他节点分成 m 个互不相交的子树每个子树本身也是一棵树树的基本术语术语解释例子根节点最顶层的节点&#xff0c;没有父节点文件夹系…...

Arduino驱动OV7670图像传感器:底层时序与跨平台实现

1. Arduino_OV767X 库深度解析&#xff1a;OV7670 CMOS 图像传感器在 Arduino 平台上的底层驱动与工程实践OV7670 是 OmniVision&#xff08;现属韦尔半导体&#xff09;于 2000 年代初推出的超低功耗、单芯片 QVGA&#xff08;320240&#xff09;彩色 CMOS 图像传感器。其采用…...

LeetCode 热题100——11.盛最多水的容器

题目&#xff1a; 给定一个长度为 n 的整数数组 height 。有 n 条垂线&#xff0c;第 i 条线的两个端点是 (i, 0) 和 (i, height[i]) 。 找出其中的两条线&#xff0c;使得它们与 x 轴共同构成的容器可以容纳最多的水。 返回容器可以储存的最大水量。 说明&#xff1a;你不…...

P1163 银行贷款 总结与反思

提炼以下几点&#xff1a;1&#xff0c;问&#xff1a;C中 整型怎么转浮点数&#xff08;int/ long long to double):答&#xff1a;直接赋值即可&#xff0c; eg ll N; double a N;2, 问&#xff1a;C中整型和浮点数怎么做加减法答&#xff1a;直接加减即可&#xff0c;自…...

OpenClaw快速接入QQ教程

OpenClaw快速接入QQ教程 OpenClaw是一个强大的开源AI Agent&#xff0c;支持通过多种聊天软件进行交互。下面将详细介绍如何在OpenClaw中接入QQ&#xff0c;实现QQ与AI的对话操作。 前置准备工作 在开始配置之前&#xff0c;请确保完成以下准备工作&#xff1a; QQ账号部署好Op…...

VRCT:打破VRChat语言壁垒的实时翻译与转录工具

VRCT&#xff1a;打破VRChat语言壁垒的实时翻译与转录工具 【免费下载链接】VRCT VRCT(VRChat Chatbox Translator & Transcription) 项目地址: https://gitcode.com/gh_mirrors/vr/VRCT 在全球化的虚拟社交平台VRChat中&#xff0c;语言差异常常成为跨文化交流的主…...

三维建模师必看:Blender中坐标变换的数学原理与操作技巧

三维建模师必看&#xff1a;Blender中坐标变换的数学原理与操作技巧 在Blender的世界里&#xff0c;每个顶点、每条边、每个面都在三维空间中占据着精确的位置。当我们移动一个物体、缩放一个模型或旋转一个摄像机时&#xff0c;背后是一套精密的数学机制在运作。对于艺术背景的…...

LeRobot数据采集全流程解析:从环境配置到动作回放(SO-100实战)

LeRobot数据采集全流程实战&#xff1a;从环境搭建到动作复现的SO-100深度指南 当我们需要让机器人学会新技能时&#xff0c;数据采集是构建智能系统的第一步。LeRobot作为Hugging Face推出的机器人学习平台&#xff0c;通过标准化流程降低了开发门槛。本文将带你完整走通SO-10…...