【洛谷P1126】机器人搬重物

是搜索play的第四弹!

机器人搬重物

题目描述

机器人移动学会(RMI)现在正尝试用机器人搬运物品。机器人的形状是一个直径 \(1.6\) 米的球。在试验阶段,机器人被用于在一个储藏室中搬运货物。储藏室是一个 \(N\times M\) 的网格,有些格子为不可移动的障碍。机器人的中心总是在格点上,当然,机器人必须在最短的时间内把物品搬运到指定的地方。机器人接受的指令有:

  • 向前移动 \(1\) 步(Creep);
  • 向前移动 \(2\) 步(Walk);
  • 向前移动 \(3\) 步(Run);
  • 向左转(Left);
  • 向右转(Right)。

每个指令所需要的时间为 \(1\) 秒。请你计算一下机器人完成任务所需的最少时间。

输入格式

第一行为两个正整数 \(N,M\ (1\le N,M\le50)\),下面 \(N\) 行是储藏室的构造,\(0\) 表示无障碍,\(1\) 表示有障碍,数字之间用一个空格隔开。接着一行有 \(4\) 个整数和 \(1\) 个大写字母,分别为起始点和目标点左上角网格的行与列,起始时的面对方向(东 \(\tt E\),南 \(\tt S\),西 \(\tt W\),北 \(\tt N\)),数与数,数与字母之间均用一个空格隔开。终点的面向方向是任意的。

输出格式

一个整数,表示机器人完成任务所需的最少时间。如果无法到达,输出 \(-1\)

样例 #1

样例输入 #1

9 10
0 0 0 0 0 0 1 0 0 0
0 0 0 0 0 0 0 0 1 0
0 0 0 1 0 0 0 0 0 0
0 0 1 0 0 0 0 0 0 0
0 0 0 0 0 0 1 0 0 0
0 0 0 0 0 1 0 0 0 0
0 0 0 1 1 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
1 0 0 0 0 0 0 0 1 0
7 2 2 7 S

样例输出 #1

12

解法&&个人感想

这题是少有的一遍过的绿题吧 果然搜索的绿题比较好做?
几个坑点:
1.机器人是有直径的 所以对于一个格子要把周围的四个格点都标记成不能走
2.需要看样例发现左右上下都要缩小一个单位
3.vis代表走到x,y时朝向dir的vis
4.在循环三步时 如果不能走直接break 如果只是走过可以瞬移

#include<bits/stdc++.h>
#define ll long long
using namespace std;
char di;
int n,m,sx,sy,sdir,fx,fy;
int ma[55][55];//ma跑的是格点 注意我们只要将所谓的格子转化成格点就可以
int vis[55][55][5];
struct node{int x,y,dir,t;
};
queue<node>q;
int dx[7]={0,-1,0,1,0,0,0},dy[7]={0,0,1,0,-1,0,0};
bool check(int x,int y){if(x>=1&&x<=n-1&&y>=1&&y<=m-1&&!ma[x][y]) return true;else return false;
}//现在要养成check函数的好习惯
int main(){scanf("%d%d",&n,&m);for(int i=1;i<=n;i++){for(int j=1;j<=m;j++){scanf("%d",&ma[i][j]);if(ma[i][j]==1){ma[i-1][j]=1;ma[i][j-1]=1;ma[i-1][j-1]=1;}//打标记}}scanf("%d %d %d %d ",&sx,&sy,&fx,&fy);cin>>di;if(di=='N') sdir=1;if(di=='E') sdir=2;if(di=='S') sdir=3;if(di=='W') sdir=4;//判断方向q.push(node{sx,sy,sdir,0});vis[sx][sy][sdir]=1;while(!q.empty()){int ax=q.front().x,ay=q.front().y,adir=q.front().dir,at=q.front().t;q.pop();if(ax==fx&&ay==fy){printf("%d",at);system("pause");return 0;}int tx=ax,ty=ay;for(int i=1;i<=3;i++){tx+=dx[adir],ty+=dy[adir];if(!check(tx,ty)) break;if(vis[tx][ty][adir]) continue;vis[tx][ty][adir]=1;q.push(node{tx,ty,adir,at+1});}//循环三步走int tdir=adir;tdir--;if(tdir==0) tdir=4;if(check(ax,ay)&&!vis[ax][ay][tdir]){vis[ax][ay][tdir]=1;q.push(node{ax,ay,tdir,at+1});} int kdir=adir;kdir++;if(kdir==5) kdir=1;if(check(ax,ay)&&!vis[ax][ay][kdir]){vis[ax][ay][kdir]=1;q.push(node{ax,ay,kdir,at+1});}//转向}cout<<-1;system("pause");return 0;
}

  

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数据库安全管理中的权限控制:保护数据资产的关键措施

title: 数据库安全管理中的权限控制:保护数据资产的关键措施 date: 2025/2/2 updated: 2025/2/2 author: cmdragon excerpt: 在信息化迅速发展的今天,数据库作为关键的数据存储和管理中心,已经成为了企业营运和决策的核心所在。然而,伴随着数据规模的不断扩大和数据价值的…

动手学大模型应用开发,第3天:大模型开发流程及架构

一、大模型开发整体流程 1. 何为大模型开发 我们将开发以大语言模型为功能核心、通过大语言模型的强大理解能力和生成能力、结合特殊的数据或业务逻辑来提供独特功能的应用称为大模型开发。开发大模型相关应用,其技术核心点虽然在大语言模型上,但一般通过调用 API 或开源模型…

Omnissa Horizon 8 2412 (8.14) 发布 - 虚拟桌面基础架构 (VDI) 和应用软件

Omnissa Horizon 8 2412 (8.14) 发布 - 虚拟桌面基础架构 (VDI) 和应用软件Omnissa Horizon 8 2412 (8.14) - 虚拟桌面基础架构 (VDI) 和应用软件 之前称为 VMware Horizon, 通过高效、安全的虚拟桌面交付增强您的工作空间 请访问原文链接:https://sysin.org/blog/omnissa-hor…

VMware Tanzu Kubernetes Grid Integrated Edition (TKGI) 1.21 - 运营商 Kubernetes 解决方案

VMware Tanzu Kubernetes Grid Integrated Edition (TKGI) 1.21 - 运营商 Kubernetes 解决方案VMware Tanzu Kubernetes Grid Integrated Edition (TKGI) 1.21 - 运营商 Kubernetes 解决方案 Kubernetes-based container solution with advanced networking, a private contain…

关于 高精度性能计数器的频率 和 cpu 频率 不一致问题

/* rdtsc指令, 该指令返回CPU自启动以来的时钟周期数;该时钟周期数,即处理器的时间戳。在CPU通电启动后,首先会重置EDX和EAX,在每个时钟周期上升或下降沿到来时,会自动累计周期数,并被记录到EDX和EAX寄存器中,EDX是高位,EAX是低位。rdtsc指令就是从该寄存器中进行获取的…

《操作系统真象还原》第十一章 TSS与用户进程

本文介绍了TSS(Task State Segment)的概念及其在操作系统中的应用。TSS是用于存储任务状态的数据结构,每个任务都有自己的TSS,包含任务切换时需要保存和恢复的信息。Intel建议为每个任务关联一个TSS,CPU通过TR寄存器指向当前任务的TSS,实现任务切换。现代操作系统采用基于…

【渗透测试】Vulnhub GROTESQUE 1.0.1

渗透环境 攻击机: IP: 192.168.10.18(Kali) 靶机: IP:192.168.10.9 靶机下载地址:https://www.vulnhub.com/entry/grotesque-101,658/ 涉及知识点:WordPress扫描(WPScan)、WrodPress反弹shell、Keypass文件解密进行渗透 一、 获取端口信息 nmap或者arp-scan都能…

DeepSeek 全面指南,95% 的人都不知道的9个技巧(建议收藏)

大家好,我是汤师爷~ 最近,DeepSeek这款AI工具爆火国内外。 虽然许多人都开始尝试使用它,但有人吐槽说,没想象中那么牛。 其实问题不在工具,很多人的使用姿势就搞错了,用大炮打蚊子,白白浪费DeepSeek的强大功能。 接下来,我将为大家分享9个实用技巧,你会发现DeepSeek远…

ez_pz_hackover_2016(shellcode)

首先检查一下保护,发现没有开启NX保护,说明可以往栈上写shellcode 首先要确定距离ebp的偏移,还有shellcode的地址(将ret覆盖到shellcode的地址上)确定离ebp偏移的代码 from pwn import * io=process("./ez_pz_hackover_2016") context.log_level=debug gdb.atta…

Android Studio 2024 不需要三方插件,直接wifi 开发调试,真方便

在测试旧版本时,wifi插件折腾了几天,还是没折腾上,最后下载了最新Android Studio Ladybug Feature Drop | 2024.2.2版本,发现居然已经集成,且放到了最显眼的位置,wifi开发,一步到位了。手机中,进开发者模式,选中 无线调试 ,再点使用二维码配对设备然后扫码,即可,…

Maven高级 -2025/1/22

分模块开发 依赖管理 可选依赖 <dependency><groupId>com.itheima</groupId><artifactId>maven_03_pojo</artifactId><version>1.0-SNAPSHOT</version><!--可选依赖是隐藏当前工程所依赖的资源,隐藏后对应资源将不具有依赖传递-…