迷宫问题中的DFS和BFS

使用dfs和bfs解决迷宫问题 使用dfs和bfs解决迷宫问题 有这么一个问题, 在一个m*n的迷宫中, 摆放着若干障碍物, 现在给定起点和终点, 求最短路径。 很水的一道题 举个例子吧: 比方说这个迷宫是5行4列的, 迷宫如下: 在这里我们有两种简单的思路, 一种用到了深搜(dfs)的思想, 另一种则用到了广搜的思想。 深搜 深搜即一条路走到底, 然后回溯, 接着再走到底, 往后再回溯… 为了使搜索过程更有序, 我们再没有障碍物与不撞墙(不出边界)的情况下, 一律先右,再下,再左,再上, 并且不走回头路。 所以我们搜索时(注意,是搜索 阅读详情

迷宫问题与深搜和广搜


前言

搜索算法是一种较为常见且基础的算法
最新在做迷宫问题的时候学习了深度优先搜索和广度优先搜索
写一个博客来总结一下 也方便以后自己复习


提示:以下是本篇文章正文内容,下面案例可供参考

一、深度优先算法

1)简介

深度优先算法(Depth-First-Search),可以简称为DFS,是从一个点出发,通过函数的递归调用,不断地寻找下一个点。如果拓展出来的这个点已经找到了我们所需要的解,那么就开始递归返回到上一个点,如果上一个点不能再继续拓展出新的点,那么就需要递归返回到其父亲节点。不断地判断下去,最终可以得到我们的最优解。

2)实例---->迷宫问题

Description:
小明迷路了,你可以帮他回家吗

Input:
第一行,输入m,n,表示该迷宫有m行n列(m<=85,n<=85)
之后输入一个m*n的矩阵
’S‘ 表示 起点
‘E’ 表示终点

output:
输出从起点走到终点需要的最短步数min
如果没有找到任何一个可行解,打印Sad


思路: 从起始点开始扩展可能的点,每拓展出来一个点,在标记数组Book中将其置真值表示已经走过,在递归返回的时候不要忘记将这个点置假,因为其他的点可能会拓展到这个点上来。

代码

#include <iostream>
#define N 90
using namespace std;
char map[N+1][N+1];
int book[N+1][N+1];  //标记地图中每个点的状态
int final_x,final_y; 
int _min=99999999;  //记录最后的最小步数
int m=0,n=0;
int next[5][2]={
   
   {
   
   0,0},{
   
   0,1},{
   
   1,0},{
   
   0,-1},{
   
   -1,0}};//方向数组
void dfs(int x,int y,int sum){
   
   
	//如果已经到达回家的路
	int xr,yr;
	if(x == final_x && y == final_y){
   
   
		if(sum < _min) _min = sum;//如果这条路线的
								 //最小步数小于当前记录的最小步数  
								 //就更新
		return;
	}
		for(int i = 1;i<=4;i++){
   
   
			xr=x+next[i
罗密欧与朱丽叶迷宫dfs时间复杂度分析_搜索思想——DFS & BFS(基础基础篇)... DFS(Deep First Search)深度优先搜索。BFS(Breath First Search)广度优先搜索。今天想说一说个人对于这两个搜索方法的见解。在我看来,DFS与BFS是算法道路上最基础最容易掌握的,同时,又能提供巨大助力的方法之一。我这里斗胆用方法二字来形容DFS以及BFS,用搜索思想来囊括二者。方法是死的,而思想是活的,我们应该通过对这两种方法的剖析来获得这种思想,因为无论是... 阅读详情

相关推荐

深度优先搜索(DFS)算法

深度优先搜索算法(DFS)是一种用于遍历图形结构的算法,它从一个起始顶点开始,沿着一条路径尽可能深入地访问图中的所有顶点,直到不能继续为止,然后返回并探索其他路径。DFS算法使用栈数据结构来实现,在访问完一个顶点后,将其未被访问的邻居压入栈中,并标记为已访问,然后从栈中取出下一个未被访问的顶点,继续进行同样的操作,直到栈为空为止。DFS算法可以用于解决图中的许多问题,例如找出两个顶点之间的最短路径、判断图是否为连通图等。DFS算法的时间复杂度为O(V+E),其中V为顶点数,E为边数。DFS算法相比BFS算法

beenles的博客 9325

【迷宫问题】通过DFS和BFS两种方式求解迷宫问题

对于迷宫问题来说,是给定一个起点,和一个终点,让你找出从起点到终点的一条可行路径,这条可行路径我们就把它叫做可行解。这篇文章就主要介绍两种方式求解迷宫类问题。 首先,我们这里假设一个迷宫是一个【nxm】的二维矩阵,从起点【(0,0)】开始,要到达终点【(n-1,m-1)】位置,每一个单元格采用【0】或者【1】表示是否可以通行,这里假设【0】是可以通行的,【1】表示障碍物,无法通行。...

✅ Java 开发工程师 1073

单细胞测序数据读取实战指南:从入门到精通

本文提供了单细胞测序数据读取的实战指南,涵盖从标准10X Genomics格式到通用表达矩阵及RDS文件的读取方法。文章重点解析了数据读取的核心步骤、常见问题解决方案及进阶技巧,旨在帮助用户夯实数据分析基础,确保后续分析流程的准确性。

weixin_29095587的博客 460

Claude Code 任务编排 头脑风暴与 疯狂拷问:Superpowers vs Grill-me 硬核对比与工程落地

Superpowers和Grill-me是AI编程中的互补工具:Superpowers提供工程化开发流程(从需求梳理到代码审查),确保规范执行;Grill-me通过持续追问帮助厘清需求,避免方向偏差。两者结合形成"构思-拷问-执行"工作流,前者负责方案生成与落地,后者专注需求审查。根据场景选择:个人项目可用Grill-me快速澄清需求,企业项目推荐Superpowers全流程,复杂开发则建议组合使用。它们分别解决"如何落地"和"是否对齐"的问题,共

十年老程序猿,AI 疯狂研究专家,前沿硬核知识分享 323

在Simulink中实现一个基于SiC MOSFET的高效率电机驱动系统

本文介绍了在Simulink中构建基于SiC MOSFET的高效率电机驱动系统的详细流程。系统由直流电源模块、SiC MOSFET逆变器模块、PMSM电机模型、控制策略模块(包括矢量控制和PWM生成)以及反馈测量模块组成。文章逐步指导了从模型创建到参数设置的完整过程,包括各模块的具体实现方法。通过仿真可以评估系统在不同负载条件下的响应速度、效率、功率密度等性能指标。该建模方法为电机驱动系统的设计和优化提供了有效工具,同时建议根据实际硬件规格和工程需求进行参数调整和定制化开发。

xiaoheshang_123的博客 248

运行后选择GDB/LLDB出现这样的窗口:launch: program ‘输入程序名称,例如 D:\Desktop\新建文件夹\a.exe‘ does not exist...如何解决?

🏆本文收录于 《全栈 Bug 调优(实战版)》 专栏。专栏聚焦真实项目中的各类疑难 Bug,从成因剖析 → 排查路径 → 解决方案 → 预防优化全链路拆解,形成一套可复用、可沉淀的实战知识体系。无论你是初入职场的开发者,还是负责复杂项目的资深工程师,都可以在这里构建一套属于自己的「问题诊断与性能调优」方法论,助你稳步进阶、放大技术价值 。

**My Coding Family** 1127

实干派!网易易盾增强版滑块验证码,全方位讲解识别思路(含源码)

该验证码是异形滑块验证码中的一种,缺口旋转+偏移的处理需要你有很好的图像处理知识,能很好的处理透明通道,同时,该验证码需要你能很好的处理缺口和背景之间匹配的关系,该验证码的处理难点就是两个缺口之间如何找到正确的,两个检测框都有很强的相似度,且加上背景图的干扰,在图像处理和有优化上难度大大增加。

码王吴彦祖的博客 2014

Unreal Engine Profiler:动画系统性能分析教程_2024-07-23_03-05-38.Tex

Unreal Engine Profiler 是一个内置的性能分析工具,它可以帮助开发者识别和解决游戏中的性能瓶颈。Profiler 提供了详细的性能数据,包括 CPU 使用率、GPU 负载、内存使用情况等,特别针对动画系统,可以查看动画蓝图的执行时间、骨骼动画的计算成本、以及动画混合和重定向的效率。通过这些数据,开发者可以定位到具体的问题,比如哪些动画状态消耗了过多的 CPU 时间,或者哪些动画资源导致了内存泄漏。

823

数控系统(CNC)系列:Hurco VMX42SR_(3).控制系统硬件组成部分

控制箱是CNC系统的核心部分,负责处理所有的控制指令和数据。它通常包含主控板、电源模块、接口板等关键组件。伺服驱动器是CNC系统中的关键组件,负责将主控板发出的控制信号转换为电机所需的驱动电流。它通过闭环控制确保电机的精确运动。电机是CNC系统中的执行机构,负责实现主控板发出的运动指令。常见的电机类型包括步进电机和伺服电机。传感器是CNC系统中的重要组件,用于检测和反馈机床的运行状态。常见的传感器类型包括位置传感器、速度传感器、温度传感器等。电源供应系统为CNC系统的所有组件提供电力。主电源。

2401_87715305的博客 1278

白鲸优化算法(BWO)详解:从生物灵感 to 工程实践

白鲸优化算法(BWO)是一种新型的群体智能优化算法,模拟白鲸的游泳、捕食和鲸落行为。该算法通过平衡因子控制探索与开发阶段的转换:探索阶段采用正弦/余弦函数模拟白鲸的同步游泳,开发阶段引入莱维飞行增强局部搜索,鲸落阶段通过随机更新避免局部最优。BWO具有参数少、实现简单、收敛速度快等优点,已在多个优化问题上展现出优异性能。其数学模型将白鲸的三种核心行为抽象为位置更新公式,实现了全局搜索与局部开发的自然平衡。

qq_42212808的博客 290

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

下一篇: 总结一下所学的内容
CleveSheep
博客等级 码龄6年 1粉丝 3原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值