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

蓝桥杯备赛 Day13.1走出迷宫

链接:走出迷宫
题目描述

小明现在在玩一个游戏,游戏来到了教学关卡,迷宫是一个N*M的矩阵。

小明的起点在地图中用“S”来表示,终点用“E”来表示,障碍物用“#”来表示,空地用“.”来表示。

障碍物不能通过。小明如果现在在点(x,y)处,那么下一步只能走到相邻的四个格子中的某一个:(x+1,y),(x-1,y),(x,y+1),(x,y-1);

小明想要知道,现在他能否从起点走到终点。

输入描述:

本题包含多组数据。
每组数据先输入两个数字N,M
接下来N行,每行M个字符,表示地图的状态。
数据范围:
2<=N,M<=500
保证有一个起点S,同时保证有一个终点E.

输出描述:

每组数据输出一行,如果小明能够从起点走到终点,那么输出Yes,否则输出No

示例1

输入

3 3
S..
..E
...
3 3
S##
###
##E

输出

Yes
No
#include<iostream>
#include<queue>
#include<cstring>
using namespace std;

const int N = 6e2 + 10;
char g[N][N];
int m, n;
int sx, sy, tx, ty;
int vis[N][N];
//去掉不必要的第一个元素
int dx[] = { 0, 1, -1, 0 };
int dy[] = { 1, 0, 0, -1 };

struct point {
	int x, y;
};
int flag = 0;

void bfs(point p) {
	queue<point> q;
	q.push(p);
	vis[p.x][p.y] = 1;
	while (!q.empty()) {
		point cur = q.front();
		q.pop();
		if (cur.x == tx && cur.y == ty) {
			flag = 1;
			return;
		}
		for (int i = 0; i < 4; i++) {
			int x = cur.x + dx[i];
			int y = cur.y + dy[i];
			// 增加边界检查
			if (x >= 1 && x <= n && y >= 1 && y <= m && (g[x][y]=='.'|| g[x][y] == 'E') && vis[x][y] != 1) {
				q.push({ x, y });
				vis[x][y] = 1;
			}
		}
	}
}
int main() {
	while (cin >> n >> m) {
		flag = 0;
		memset(vis, 0, sizeof vis);
		for (int i = 1; i <= n; i++) {
			for (int j = 1; j <= m; j++) {
				cin >> g[i][j];
				if (g[i][j] == 'S') {
					sx = i;
					sy = j;
				}
				if (g[i][j] == 'E') {
					tx = i;
					ty = j;
				}
			}
		}
		bfs({ sx, sy });
		if (flag == 1) cout << "Yes" << endl;
		else cout << "No" << endl;
	}
	return 0;
}

相关文章:

  • 以SpringBoot+Vue分布式架构商城系统为例,讲解订单生命周期的管理
  • 分卷压缩怎么操作?分卷压缩怎么解压?
  • Python----PyQt开发(PyQt高级:手搓一个简单的记事本)
  • 腾讯混元hunyuan3d生成模型,本地搭建和使用
  • singleTaskAndroid的Activity启动模式知识点总结
  • 374_C++_升级等其他类型标签,使用将4字节字符串转换为无符号整数的定义方式
  • Managed Lustre 和 WEKA:高性能文件系统的对比与应用
  • 图像缩放的双线性插值实现方式
  • Reasoning in High Gear 推理加速发展
  • 【Java八股文】02-Java集合面试篇
  • docker容器部署jar应用导入文件时候报缺少字体错误解决
  • DeepSeek预测25考研分数线,复试资料分享
  • 【弹性计算】弹性计算的技术架构
  • 在springboot加vue项目中加入图形验证码
  • Windows软件自动化利器:pywinauto python
  • 用什么办法能实现ubuntu里面运行的自己开发的python程序能自动升级。
  • 【横川咨询】开发了一个极简音乐播放器
  • 【原创】解决vue-element-plus-admin无法实现下拉框动态控制表单功能,动态显隐输入框
  • 解释下SpringBoot中的服务、依赖项、微服务、分布式的概念和关系
  • error: conflicting types for ‘SSL_SESSION_get_master_key’
  • 上海北外滩,未来五年将如何“长个子”“壮筋骨”?
  • 金价大跌!足金饰品每克一夜便宜14元,涨势是否已终结?
  • 从“求生”到“生活”:医保纳入创新药让梗阻性肥厚型心肌病患者重拾生活掌控权
  • 超新星|罚丢点球的那道坎,刘诚宇靠自己迈了过去
  • 中国目的地·入境游简报006|外国网红游中国启示录
  • 中方发布会:中美经贸高层会谈氛围是坦诚的、深入的、具有建设性的