迷宫问题 BFS入门水题

2024-08-27 23:32
文章标签 问题 入门 bfs 水题 迷宫

本文主要是介绍迷宫问题 BFS入门水题,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1102:迷宫问题

时间限制:1 秒
内存限制:32 兆
特殊判题:
提交:84
解决: 41

题目描述

小明置身于一个迷宫,请你帮小明找出从起点到终点的最短路程。
小明只能向上下左右四个方向移动。

输入格式

输入包含多组测试数据。输入的第一行是一个整数T,表示有T组测试数据。
每组输入的第一行是两个整数N和M(1<=N,M<=100)。
接下来N行,每行输入M个字符,每个字符表示迷宫中的一个小方格。
字符的含义如下:
‘S’:起点
‘E’:终点
‘-’:空地,可以通过
‘#’:障碍,无法通过
输入数据保证有且仅有一个起点和终点。

输出

对于每组输入,输出从起点到终点的最短路程,如果不存在从起点到终点的路,则输出-1。

样例输入

1
5 5
S-###
-----
##---
E#---
---##

样例输出

9

#include<stdio.h>
#include<iostream>
#include<queue>
#define maxn 105
using namespace std;int t;int m,n;int sx,sy;//起点int ex,ey;//终点char map[maxn][maxn]; //存图int vis[maxn][maxn];//判断是否遍历过int dist[4][2]={{-1,0},{0,-1},{1,0},{0,1}};//四个方向int ans;
struct  node
{int x;int y;int step;
};
bool check(int x,int y)
{if(x>=0&&x<m&&y>=0&&y<n&&map[x][y]!='#'&&vis[x][y]==0)return true;return false;
}
void bfs()
{queue<node> q;node a;node next;a.x=sx;a.y=sy;a.step=0;vis[a.x][a.y]=1;q.push(a);       //始点入列while(!q.empty())//队列非空{a=q.front();//取首元素q.pop();<span style="font-family:'Lucida Console';">    //取出后删除首元素</span>for(int i=0;i<4;i++)//向四个方向遍历{next=a;next.x+=dist[i][0];next.y+=dist[i][1];next.step=a.step+1;if(next.x==ex&next.y==ey)<span style="font-family:'Lucida Console';">//判断是否是终点</span>{ans=next.step;return ;}if(check(next.x,next.y))//遍历标记,且入列{vis[next.x][next.y]=1;q.push(next);}}}ans=-1;//<span style="font-family:'Lucida Console';">死路</span>}
int main()
{scanf("%d",&t);while(t--){scanf("%d%d",&m,&n);for(int i=0;i<m;i++){scanf("%s",&map[i]);for(int j=0;j<n;j++){if(map[i][j]=='S')//得起点坐标{sx=i;sy=j;}if(map[i][j]=='E')//得终点坐标{ex=i;ey=j;}}}bfs();printf("%d\n",ans);}return 0;}


这篇关于迷宫问题 BFS入门水题的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1113095

相关文章

线上Java OOM问题定位与解决方案超详细解析

《线上JavaOOM问题定位与解决方案超详细解析》OOM是JVM抛出的错误,表示内存分配失败,:本文主要介绍线上JavaOOM问题定位与解决方案的相关资料,文中通过代码介绍的非常详细,需要的朋... 目录一、OOM问题核心认知1.1 OOM定义与技术定位1.2 OOM常见类型及技术特征二、OOM问题定位工具

Vue3绑定props默认值问题

《Vue3绑定props默认值问题》使用Vue3的defineProps配合TypeScript的interface定义props类型,并通过withDefaults设置默认值,使组件能安全访问传入的... 目录前言步骤步骤1:使用 defineProps 定义 Props步骤2:设置默认值总结前言使用T

从入门到精通详解Python虚拟环境完全指南

《从入门到精通详解Python虚拟环境完全指南》Python虚拟环境是一个独立的Python运行环境,它允许你为不同的项目创建隔离的Python环境,下面小编就来和大家详细介绍一下吧... 目录什么是python虚拟环境一、使用venv创建和管理虚拟环境1.1 创建虚拟环境1.2 激活虚拟环境1.3 验证虚

Web服务器-Nginx-高并发问题

《Web服务器-Nginx-高并发问题》Nginx通过事件驱动、I/O多路复用和异步非阻塞技术高效处理高并发,结合动静分离和限流策略,提升性能与稳定性... 目录前言一、架构1. 原生多进程架构2. 事件驱动模型3. IO多路复用4. 异步非阻塞 I/O5. Nginx高并发配置实战二、动静分离1. 职责2

解决升级JDK报错:module java.base does not“opens java.lang.reflect“to unnamed module问题

《解决升级JDK报错:modulejava.basedoesnot“opensjava.lang.reflect“tounnamedmodule问题》SpringBoot启动错误源于Jav... 目录问题描述原因分析解决方案总结问题描述启动sprintboot时报以下错误原因分析编程异js常是由Ja

MySQL 表空却 ibd 文件过大的问题及解决方法

《MySQL表空却ibd文件过大的问题及解决方法》本文给大家介绍MySQL表空却ibd文件过大的问题及解决方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考... 目录一、问题背景:表空却 “吃满” 磁盘的怪事二、问题复现:一步步编程还原异常场景1. 准备测试源表与数据

解决Nginx启动报错Job for nginx.service failed because the control process exited with error code问题

《解决Nginx启动报错Jobfornginx.servicefailedbecausethecontrolprocessexitedwitherrorcode问题》Nginx启... 目录一、报错如下二、解决原因三、解决方式总结一、报错如下Job for nginx.service failed bec

SysMain服务可以关吗? 解决SysMain服务导致的高CPU使用率问题

《SysMain服务可以关吗?解决SysMain服务导致的高CPU使用率问题》SysMain服务是超级预读取,该服务会记录您打开应用程序的模式,并预先将它们加载到内存中以节省时间,但它可能占用大量... 在使用电脑的过程中,CPU使用率居高不下是许多用户都遇到过的问题,其中名为SysMain的服务往往是罪魁

MySQ中出现幻读问题的解决过程

《MySQ中出现幻读问题的解决过程》文章解析MySQLInnoDB通过MVCC与间隙锁机制在可重复读隔离级别下解决幻读,确保事务一致性,同时指出性能影响及乐观锁等替代方案,帮助开发者优化数据库应用... 目录一、幻读的准确定义与核心特征幻读 vs 不可重复读二、mysql隔离级别深度解析各隔离级别的实现差异

C++ vector越界问题的完整解决方案

《C++vector越界问题的完整解决方案》在C++开发中,std::vector作为最常用的动态数组容器,其便捷性与性能优势使其成为处理可变长度数据的首选,然而,数组越界访问始终是威胁程序稳定性的... 目录引言一、vector越界的底层原理与危害1.1 越界访问的本质原因1.2 越界访问的实际危害二、基