信息学奥赛一本通 2112:【24CSPJ普及组】地图探险(explore) | 洛谷 P11228 [CSP-J 2024] 地图探险

【题目链接】

ybt 2112:【24CSPJ普及组】地图探险(explore)
洛谷 P11228 [CSP-J 2024] 地图探险

【题目考点】

1. 模拟
2. 二维数组
3. 方向数组

在一个矩阵中,当前位置为(sx, sy),将下一个位置与当前位置横纵坐标的差值记到一个数组中,即为方向数组。
设方向数组dir[4][2]

  • dir[i][0]表示下一步到达位置的行号和当前位置行号的差值
  • dir[i][1]表现下一步到达位置的列号和当前位置列号的差值。

以遍历上下左右四个方向为例:

  • 二维数组写法
int dir[4][2] = {{0,1},{0,-1},{1,0},{-1,0}};
for(int i = 0; i < 4; ++i)
{
	int x = sx + dir[i][0], y = sy + dir[i][1];
	//(sx,sy)周围的一个新的位置为(x, y)
}

【解题思路】

题目中已经给出了表示方向的方法:整数d表示机器人前进的方向,d = 0 代表向东(右),d = 1 代表向南(下),d = 2 代表向西(左),d = 3 代表向北(上)。向右转操作为d = (d+1)%4

设方向数组dir[4][2]dir[d]表示向整数d代表的方向走一步后,新位置和原位置横纵坐标的差值。
dir[0]表示向右走一步新的位置和当前位置横纵坐标的差值,即dir[0][0]=0, dir[0][1] = 1,或写为dir[0] = {0, 1}
dir[1]表示向下走一步后新的位置和当前位置横纵坐标的差值,dir[1] = {1, 0}
dir[2]表示向左走一步后新的位置和当前位置横纵坐标的差值,dir[2] = {0, -1}
dir[3]表示向上走一步后新的位置和当前位置横纵坐标的差值,dir[3] = {-1, 0}
所以将方向数组声明为int dir[4][2] = {{0, 1}, {1, 0}, {0, -1}, {-1, 0}};

设vis数组记录一个位置是否已访问过,设ans记录经过的位置数量。
从起始位置开始一共需要走k步
每走一步前,先通过当前位置和方向数组求出下一个位置的坐标

  • 如果下一个位置在地图范围内,而且是空地,不是障碍,那么可以走到下一个位置
    • 如果下一个位置没有访问过,那么将该位置标记为已访问过,经过的位置数量加1。
    • 如果下一个位置已访问过,则不做事情。
  • 如果下一个位置不是空地,那么进行右转操作。

该题是模拟类问题,题目描述已经足够细致,按照题目描述逐步实现即可。
注意该问题是多组数据问题,处理每组数据前需要清空相关变量,比如vis数组,和ans变量。

【题解代码】

解法1:模拟

#include<bits/stdc++.h>
using namespace std;
#define N 1005
int dir[4][2] = {{0, 1}, {1, 0}, {0, -1}, {-1, 0}};//方向:右下左上 
char mp[N][N];
bool vis[N][N];//vis[i][j]:(i,j)位置是否已访问过 
int main()
{
	int t, n, m, k, sx, sy, d, ans;
	cin >> t;
	while(t--)
	{
		cin >> n >> m >> k >> sx >> sy >> d;//(sx, sy)当前位置 
		for(int i = 1; i <= n; ++i)
			for(int j = 1; j <= m; ++j)
				cin >> mp[i][j];
		memset(vis, 0, sizeof(vis));
		vis[sx][sy] = true;//经过起始位置
		ans = 1;//ans:经过的位置的数量 
		for(int i = 1; i <= k; ++i)//走k步 
		{
			int x = sx+dir[d][0], y = sy+dir[d][1];//(x,y)下一步要走到的位置 
			if(x >= 1 && x <= n && y >= 1 && y <= m && mp[x][y] == '.')//如果(x,y)在地图内,且是空地 
			{
				if(!vis[x][y])
				{
					vis[x][y] = true;
					ans++;
				}
				sx = x, sy = y;
			}
			else
				d = (d+1)%4;//右转 
		}
		cout << ans << endl;
	}
	return 0; 
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

linux运行级别

运行级别&#xff1a;指linux系统在启动和运行过程中所处的不同的状态。 运行级别之间的切换&#xff1a;init (级别数) 示例&#xff1a; linux的运行级别一共有7种&#xff0c;分别是&#xff1a; 运行级别0&#xff1a;停机状态 运行级别1&#xff1a;单用户模式/救援模式…

【自开发工具介绍】SQLSERVER的ImpDp和ExpDp工具03

SQLSERVER的ImpDp和ExpDp工具 1、全部的表导出&#xff08;仅表结构导出&#xff09; 2、导出的表结构&#xff0c;导入到新的数据库 导入前&#xff0c;test3数据没有任何表 导入 导入结果确认&#xff1a;表都被做成&#xff0c;但是没有数据 3、全部的表导出&#x…

商品列表及商品详情展示

前言 本文将展示一段结合 HTML、CSS 和 JavaScript 的代码&#xff0c;实现了一个简单的商品展示页面及商品详情&#xff0c;涵盖数据获取、渲染、搜索及排序等功能。 效果展示 点击不同的商品会展示对应的商品详情。 代码部分 代码总体实现 <!DOCTYPE html> <htm…

c++提取矩形区域图像的梯度并拟合直线

c提取旋转矩形区域的边缘最强梯度点&#xff0c;并拟合直线 #include <opencv2/opencv.hpp> #include <iostream> #include <vector>using namespace cv; using namespace std;int main() {// 加载图像Mat img imread("image.jpg", IMREAD_GRAYS…

独立开发浏览器插件:案例与启示

浏览器插件&#xff08;Browser Extension&#xff09;作为提升用户浏览体验的重要工具&#xff0c;近年来吸引了许多独立开发者的关注。从广告拦截到生产力工具&#xff0c;再到个性化定制功能&#xff0c;浏览器插件的开发为个人开发者提供了一个低成本、高潜力的创业机会。本…

Linux系统 环境变量

环境变量 写在前面概念查看环境变量main函数的参数argc & argvenv bash环境变量 写在前面 对于环境变量&#xff0c;本篇主要介绍基本概念及三四个环境变量 —— PATH、HOME、PWD。其中 PATH 作为 “ 敲门砖 ”&#xff0c;我们会更详细讲解&#xff1b;理解环境变量的全局…

BFS(广度优先搜索)——搜索算法

BFS&#xff0c;也就是广度&#xff08;宽度&#xff09;优先搜索&#xff0c;二叉树的层序遍历就是一个BFS的过程。而前、中、后序遍历则是DFS&#xff08;深度优先搜索&#xff09;。从字面意思也很好理解&#xff0c;DFS就是一条路走到黑&#xff0c;BFS则是一层一层地展开。…

SpringCloud基础二(完结)

HTTP客户端Feign 在SpringCloud基础一中&#xff0c;我们利用RestTemplate结合服务注册与发现来发起远程调用的代码如下&#xff1a; String url "http://userservice/user/" order.getUserId(); User user restTemplate.getForObject(url, User.class);以上代码就…

Spring Bean 容器

技术成长&#xff0c;是对场景设计细节不断的雕刻&#xff01; 你觉得自己的技术什么时候得到了快速的提高&#xff0c;是CRUD写的多了以后吗&#xff1f;想都不要想&#xff0c;绝对不可能&#xff01;CRUD写的再多也只是能满足你作为一个搬砖工具人&#xff0c;敲击少逻辑流…

【react+redux】 react使用redux相关内容

首先说一下&#xff0c;文章中所提及的内容都是我自己的个人理解&#xff0c;是我理逻辑的时候&#xff0c;自我说服的方式&#xff0c;如果有问题有补充欢迎在评论区指出。 一、场景描述 为什么在react里面要使用redux&#xff0c;我的理解是因为想要使组件之间的通信更便捷…

利用腾讯云cloud studio云端免费部署deepseek-R1

1. cloud studio 1.1 cloud studio介绍 Cloud Studio&#xff08;云端 IDE&#xff09;是基于浏览器的集成式开发环境&#xff0c;为开发者提供了一个稳定的云端工作站。支持CPU与GPU的访问。用户在使用 Cloud Studio 时无需安装&#xff0c;随时随地打开浏览器即可使用。Clo…

基于VMware的ubuntu与vscode建立ssh连接

1.首先安装openssh服务 sudo apt update sudo apt install openssh-server -y 2.启动并检查ssh服务状态 到这里可以按q退出 之后输入命令 &#xff1a; ip a 红色挡住的部分就是我们要的地址&#xff0c;这里就不展示了哈 3.配置vscode 打开vscode 搜索并安装&#xff1a;…

四川正熠法律咨询有限公司正规吗可信吗?

在纷繁复杂的法律环境中&#xff0c;寻找一家值得信赖的法律服务机构是每一个企业和个人不可或缺的需求。四川正熠法律咨询有限公司&#xff0c;作为西南地区备受瞩目的法律服务提供者&#xff0c;以其专注、专业和高效的法律服务&#xff0c;成为众多客户心中的首选。 正熠法…

【优先算法】专题——位运算

在讲解位运算之前我们来总结一下常见的位运算 一、常见的位运算 1.基础为运算 << &&#xff1a;有0就是0 >> |&#xff1a;有1就是1 ~ ^&#xff1a;相同为0&#xff0c;相异位1 /无进位相加 2.给一个数 n&#xff0c;确定它的二进制表示…

Android --- handler详解

handler 理解 handler 是一套Android 消息传递机制&#xff0c;主要用于线程间通信。 tips&#xff1a; binder/socket 用于进程间通信。 参考&#xff1a; Android 进程间通信-CSDN博客 handler 就是主线程在起了一个子线程&#xff0c;子线程运行并生成message &#xff0c;l…

【线程】基于阻塞队列的生产者消费者模型

文章目录 1 生产者消费者模型2 阻塞队列2.1 成员变量2.2 消费者操作2.3 生产者生产 3 总结 1 生产者消费者模型 在多线程环境中&#xff0c;生产者消费者模型是一种经典的线程同步模型&#xff0c;用于处理生产者线程与消费者线程之间的工作调度和资源共享问题。在这个模型中&a…

解决PyG安装中torch-sparse安装失败问题:详细指南

1 问题描述 最近在学习GNN&#xff0c;需要使用PyTorch Geometric&#xff08;PyG&#xff09;库。在安装PyG的过程中&#xff0c;遇到了torch-sparse安装失败的问题&#xff0c;错误提示为&#xff1a; ERROR: Failed building wheel for torch-sparse本文将详细记录问题的解…

4 [危机13小时追踪一场GitHub投毒事件]

事件概要 自北京时间 2024.12.4 晚间6点起&#xff0c; GitHub 上不断出现“幽灵仓库”&#xff0c;仓库中没有任何代码&#xff0c;只有诱导性的病毒文件。当天&#xff0c;他们成为了 GitHub 上 star 增速最快的仓库。超过 180 个虚假僵尸账户正在传播病毒&#xff0c;等待不…

【B站保姆级视频教程:Jetson配置YOLOv11环境(六)PyTorchTorchvision安装】

Jetson配置YOLOv11环境&#xff08;6&#xff09;PyTorch&Torchvision安装 文章目录 1. 安装PyTorch1.1安装依赖项1.2 下载torch wheel 安装包1.3 安装 2. 安装torchvisiion2.1 安装依赖2.2 编译安装torchvision2.2.1 Torchvisiion版本选择2.2.2 下载torchvisiion到Downloa…

自动化软件测试的基本流程

一、自动化测试的准备 1.1 了解测试系统 首先对于需要测试的系统我们需要按照软件需求说明书明确软件功能。这里以智慧养老系统作为案例进行测试&#xff0c;先让我们看看该系统的登录界面和用户管理界面。 登录界面&#xff1a; 登录成功默认界面&#xff1a; 用户管理界面…