大哈的变换迷宫的题解

目录

原题描述:

【题目描述】

【输入格式】

【输出格式】

【样例输入】

【样例输出】

【数据范围】

题目大意:

主要思路:

代码code(附有注释)


时间限制: 1000ms

空间限制: 524288kB

原题描述:

【题目描述】

大哈已经是个成年人了,网页游戏在他当年还是风靡一时。他记忆中有这么一款游戏。

角色一开始在迷宫的(1,1)处,最终要到达(n,n)的位置,迷宫中有一些障碍物,障碍不能走。同时迷宫中有些点是彩色点,彩色点的颜色按照这个点的颜色序列每秒变换一次,变完了又会循环,比如这个颜色点会这么变,“1 2 4”,所以它第一秒是1,第二秒是2,第三秒是4,第四秒又是1,依次往复。当你到达彩色点的时候,你可以选择把他当普通点直接走上去,也可以选择在彩色点传送,传送到任意一个此时和它颜色相同的彩色点上,传送不需要时间。大哈可以往上下左右走,走一格花费1秒,他也可以选择不动,等一秒,因为说不定等一秒,下一步就可以直接传送了。大哈现在已经学过一些算法了,他想知道到达(n,n)的最短时间是多少?

【输入格式】

第一行,一个整数n

接下来n行,每行n个整数,用空格隔开。每个整数是0或者1,0表示空地,1表示障碍物。保证起点和终点都是0

接下来1行,一个整数t,表示彩色格子的数量

接下来t行,每行第一个和第二个整数xi和yi表示这个彩色格子的坐标;第三个整数mi,表示第i个彩色格子的颜色序列长度,后面跟着mi个整数,表示当前这个彩色点的颜色变换顺序

【输出格式】

一个整数,表示到达终点的最短时间,如果不能到达终点,输出-1.

【样例输入】

5
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
0 0 1 1 1
0 0 1 0 0
3
2 2 3 1 2 3
3 4 5 1 2 1 2 4
5 4 4 5 5 5 4

【样例输出】

21

【数据范围】

n<=1000, t<=10, 颜色种类不超过10,mi不超过10

题目大意:

给你一个矩阵,如果是0,可以走,如果是1,不能走,没走一步耗时1,有些点是彩色点,可以传送到与当前彩色点相同的点,传送不耗时,问你从(1,1)走到(n,n)最少需要多久。

主要思路:

既然是最少,又是每次走都是1,很明显bfs,思路上没啥难度。

代码code(附有注释)

#include<bits/stdc++.h>
using namespace std;
int dx[] = {0,-1,0,1};
int dy[] = {1,0,-1,0};
map<pair<int,int>,int> mp;
map<int,pair<int,int>> mp1;
int a[1010][1010];
int f[1010][1010];
int dis[1010][1010];
int t,n;
void bfs()
{memset(dis,0x3f,sizeof(dis));queue<pair<int,int>> q;q.push({1,1});dis[1][1] = 0;while(!q.empty()){auto [x,y] = q.front();q.pop();if(mp[{x,y}])//如果这是一个颜色点,可以选择传送{int u=mp[{x,y}];int v=dis[x][y];for(int i=0;i<=2520;i++)//枚举秒{for(int j=1;j<=t;j++)//枚举颜色点{if(j == u){continue;}int z = (v+i)%f[u][0],m=(v+i)%f[j][0];//计算一下第i秒是啥颜色点if(z == 0){z = f[u][0];}if(m == 0){m = f[j][0];}//判断一下if(f[u][z] == f[j][m])//匹配{auto [tx,ty] = mp1[j];if(dis[tx][ty]>v+i)//如果路径可以更小{dis[tx][ty] = v+i;//变成更小路径q.push({tx,ty});//加入队列}}}}}for(int i=0;i<4;i++)//选择走{int tx=x+dx[i],ty=y+dy[i];if(tx<1||tx>n||ty<1||ty>n||a[tx][ty] == 1){continue;}if(dis[tx][ty]>dis[x][y]+1){dis[tx][ty] = dis[x][y]+1;q.push({tx,ty});}}}if(dis[n][n]>1e9)//如果走不到{cout<<"-1";}else{cout<<dis[n][n];}
}
int main()
{
//	int n;cin>>n;for(int i=1;i<=n;i++){for(int j=1;j<=n;j++){cin>>a[i][j];}}cin>>t;for(int i=1;i<=t;i++){int x,y;cin>>x>>y;cin>>f[i][0];mp[{x,y}] = i;//{x,y}是第i个颜色点mp1[i] = {x,y};//第i个颜色点是{x,y};for(int j=1;j<=f[i][0];j++){cin>>f[i][j];}}bfs();return 0;
}

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

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

相关文章

【webrtc】跟webrtc学时间戳、序号类型转换

间隔ms src\modules\congestion_controller\remb_throttler.ccnamespace {constexpr TimeDelta kRembSendInterval = TimeDelta::Millis(200); } // namespace百分比的处理 src\modules\congestion_controller\remb_throttler.ccvoid RembT

行业-职业-大全-JSON

数据来源&#xff1a; https://blog.csdn.net/wjwABCDEFG/article/details/115669504 已将JSON进行格式处理 [{"Industry": "人事/行政/后勤","Occupations": ["人事专员/助理","人事信息系统(HRIS)管理","人事总监…

kotlin 简单实现实体类的Parcelable序列化接口

以前用Java代码实现Parcelable序列化接口&#xff0c;需要在实体类里面写一堆代码&#xff0c;麻烦得很&#xff0c;现在用kotlin开发安卓APP&#xff0c;只需2步就可以实现&#xff0c;这里记录下&#xff1b; 1. 在模块的build.gradle文件如下配置&#xff1a; apply plugi…

TCP三握四挥(面试需要)

TCP建立连接需要三次握手过程&#xff0c;关闭连接需要四次挥手过程 三次握手 从图中可以看出&#xff0c;客户端在发起connect时&#xff0c;会发起第一次和第三次握手。服务端在接收客户端连接时&#xff0c;会发起第二次握手。 这三次握手&#xff0c;都会通过SYNACK的方式…

基于ChatGPT4+Python近红外光谱数据分析及机器学习与深度学习建模教程

详情点击链接&#xff1a;基于ChatGPT4Python近红外光谱数据分析及机器学习与深度学习建模教程 第一&#xff1a;GPT4 1、ChatGPT&#xff08;GPT-1、GPT-2、GPT-3、GPT-3.5、GPT-4模型的演变&#xff09; 2、ChatGPT对话初体验 3、GPT-4与GPT-3.5的区别&#xff0c;以及与…

20240122在WIN10+GTX1080下使用字幕小工具V1.2的使用总结(whisper)

20240122在WIN10GTX1080下使用字幕小工具V1.2的使用总结 2024/1/22 19:52 结论&#xff1a;这个软件如果是习作&#xff0c;可以打101分&#xff0c;功能都实现了。 如果作为商业软件/共享软件&#xff0c;在易用性等方面&#xff0c;可能就只能有70分了。 【百分制】 可选的改…

2017年认证杯SPSSPRO杯数学建模A题(第二阶段)安全的后视镜全过程文档及程序

2017年认证杯SPSSPRO杯数学建模 A题 安全的后视镜 原题再现&#xff1a; 汽车后视镜的视野对行车安全非常重要。一般来说&#xff0c;汽车的后视镜需要有良好的视野范围&#xff0c;以便驾驶员能够全面地了解车后方的道路情况。同时&#xff0c;后视镜也要使图像的畸变尽可能…

idea编译打包前端vue项目

网上download了一个前端vue项目 第一次接触前端记录一下编译打包遇到的问题 1、idea前端项目打包一般是依赖 <groupId>org.codehaus.mojo</groupId> <artifactId>exec-maven-plugin</artifactId> <version>3.0…

GitLab备份与恢复测试(基于Docker)

GitLab环境准备 docker run --name gitlab \ -p 2022:22 -p 2080:80 -p 2443:443 -d \ -v /opt/gitlab/config:/etc/gitlab \ -v /opt/gitlab/gitlab/logs:/var/log/gitlab \ -v /opt/gitlab/gitlab/data:/var/opt/gitlab \ gitlab/gitlab-ce:16.2.1-ce.0备份 1.修改配置文件…

Centos升级gcc版本

步骤1&#xff1a;查看当前服务器gcc版本 gcc –version 步骤2&#xff1a;查看当前gcc安装目录 find / -name gcc cd /usr/bin ll gcc* 因为gcc&#xff0c;g&#xff0c;c都是配套的,查找出 g和c的原版本位置 步骤3&#xff1a;安装下载依赖包 yum install glibc-heade…

yolov8 opencv dnn部署 github代码

源码地址 本人使用的opencv c github代码,代码作者非本人 实现推理源码中作者的yolov8s.onnx 推理条件 windows 10 Visual Studio 2019 Nvidia GeForce GTX 1070 opencv4.7.0 (opencv4.5.5在别的地方看到不支持yolov8的推理&#xff0c;所以只使用opencv4.7.0) c部署 环境…

标量、向量、矩阵和张量的区别?

标量、向量、矩阵和张量是数学和物理学中常用的概念&#xff0c;它们在多维数据表示和处理中扮演着关键角色。下面是这些概念的基本区别&#xff1a; 标量&#xff08;Scalar&#xff09;: -标量是单个数字&#xff0c;用于表示单一的量。 -它没有方向。 -在数学中&#xff0…

竞赛保研 机器视觉目标检测 - opencv 深度学习

文章目录 0 前言2 目标检测概念3 目标分类、定位、检测示例4 传统目标检测5 两类目标检测算法5.1 相关研究5.1.1 选择性搜索5.1.2 OverFeat 5.2 基于区域提名的方法5.2.1 R-CNN5.2.2 SPP-net5.2.3 Fast R-CNN 5.3 端到端的方法YOLOSSD 6 人体检测结果7 最后 0 前言 &#x1f5…

Maven《四》-- 基于Idea进行Maven工程构建

目录 &#x1f436;4.1 构建概念和构建过程 &#x1f436;4.2 命令方式项目构建 1. &#x1f959;编译&#xff1a;mvn compile 2. &#x1f959;清理&#xff1a;mvn clean 3. &#x1f959;打包&#xff1a;mvn package 4. &#x1f959;安装&#xff1a;mvn install …

泰迪科技最新大数据法律监督模型解决方案

大数据法律监督平台是基于监督数据整合管理平台、监督模型构建平台、内置模型库以及法律监督线索管理平台打造的一套服务于检察机关法律监督工作的专业化系统。通过数据采集、融合、挖掘、建模、展现等一系列能力&#xff0c;辅助检察官从纷繁复杂的数据中&#xff0c;开展多维…

java遍历(for和forEach)

1.dade文件 package model;public class dade {private int id;private String name;public dade() {}public dade(int id, String name) {this.id id;this.name name;}public int getId() {return id;}public void setId(int id) {this.id id;}public String getName() {r…

unity3d在汽车领域的未来发展趋势浅谈

Unity3D在汽车领域的未来发展趋势可以从以下几个方面深入分析&#xff1a; 增强现实&#xff08;AR&#xff09;与虚拟现实&#xff08;VR&#xff09;的融合&#xff1a;随着AR和VR技术的不断发展&#xff0c;未来Unity3D将在汽车领域中实现AR和VR技术的融合。通过这种融合&a…

Java中的内存溢出与内存泄漏深度解析

目录 引言 一. 内存溢出&#xff08;Memory Overflow&#xff09; 1.1 堆内存溢出 1.2 栈内存溢出 1.3 内存溢出的解决策略 1.3.1 优化对象的创建和销毁 1.3.2 调整堆内存大小 1.3.3 使用内存分析工具 1.3.4 避免创建过大的对象 1.3.5 定期清理不再使用的对象 二、…

使用docker以容器方式安装redis

文章目录 获取redis镜像查看本地镜像从官网获取 redis.conf 配置文件创建并启动redis容器 获取redis镜像 docker pull redis #默认获取redis:latest&#xff0c;即最新的镜像 查看本地镜像 docker images 从官网获取 redis.conf 配置文件 创建并进入目录 [rootVM-16-11-ce…

如何快速上手Vue框架

快速上手Vue框架可以遵循以下步骤。Vue是一个渐进式JavaScript框架&#xff0c;因其易学和灵活而受到许多开发者的欢迎。 1. 基础知识 在开始学习Vue之前&#xff0c;确保你具备以下基础知识&#xff1a; HTML、CSS和JavaScript&#xff1a;Vue是一个JavaScript框架&#xf…