dfs专题(记忆化搜索)P1141 01迷宫——洛谷(题解)
题目描述
有一个仅由数字 00 与 11 组成的 �×�n×n 格迷宫。若你位于一格 00 上,那么你可以移动到相邻 44 格中的某一格 11 上,同样若你位于一格 11 上,那么你可以移动到相邻 44 格中的某一格 00 上。
你的任务是:对于给定的迷宫,询问从某一格开始能移动到多少个格子(包含自身)。
输入格式
第一行为两个正整数 �,�n,m。
下面 �n 行,每行 �n 个字符,字符只可能是 00 或者 11,字符之间没有空格。
接下来 �m 行,每行两个用空格分隔的正整数 �,�i,j,对应了迷宫中第 �i 行第 �j 列的一个格子,询问从这一格开始能移动到多少格。
输出格式
�m 行,对于每个询问输出相应答案。
输入输出样例
输入 #1复制
2 2 01 10 1 1 2 2
输出 #1复制
4 4
说明/提示
对于样例,所有格子互相可达。
- 对于 20%20% 的数据,�≤10n≤10;
- 对于 40%40% 的数据,�≤50n≤50;
- 对于 50%50% 的数据,�≤5m≤5;
- 对于 60%60% 的数据,�,�≤100n,m≤100;
- 对于 100%100% 的数据,1≤�≤10001≤n≤1000,1≤�≤1000001≤m≤100000。
想法:
这题也是dfs求连通块,不过细胞那题是求连通块的个数,这题是求一个连通块中有多少个块。代码如下。
代码:
#include<bits/stdc++.h>
using namespace std;
int ans;
char mg[1010][1010];//迷宫
int n,m;
int st[1010][1010];//状态数组
int dx[]={0,0,1,-1};//四个方向
int dy[]={1,-1,0,0};
void dfs(int x,int y){
for(int i=0;i<4;i++){
int xx=dx[i]+x;
int yy=dy[i]+y;
if(xx>n||xx<1||yy>n||yy<1) continue;//超范围
if(st[xx][yy]==1) continue;//走过了
if(mg[xx][yy]==mg[x][y]) continue;//走不了
st[xx][yy]=1;
ans++;
dfs(xx,yy);
}
}
int main(){
cin>>n>>m;
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
cin>>mg[i][j];
}
}
int a,b;
while(m--){
memset(st,0,sizeof(st));
ans=1;
cin>>a>>b;
st[a][b]=1;
dfs(a,b);
cout<<ans<<endl;
}
}
然而事情没有这么简单,这题这么写会超时,因为查询的次数太多了,查过的点还要重新计算答案,而且属于同一个联通块的点的答案还是一样的,这样就可以用到记忆化搜索。虽然这个也不是我推的,了解一下咯。它这记忆化也是蛮巧妙的吧,用一个二维数组存坐标,一个二维数组存答案,就是直接将整个迷宫的答案都搜一遍并存起来,后面直接查询。而且它搜联通块和搜答案是一起的,就是记忆化和搜答案是一起的。
代码:
#include<bits/stdc++.h>
using namespace std;
int n,m;
int ans=1;
int Ans[1010][1010];
int zb[1000010][2];//坐标
int st[1010][1010];
char mg[1010][1010];
int dx[]={0,0,1,-1};
int dy[]={1,-1,0,0};
void dfs(int x,int y){
for(int i=0;i<4;i++){
int xx=dx[i]+x;
int yy=dy[i]+y;
if(xx>n||xx<1||yy>n||yy<1) continue;//超范围
if(mg[x][y]==mg[xx][yy]) continue;//走不到
if(st[xx][yy]==1) continue;//走过了
ans++;
st[xx][yy]=1;
zb[ans][0]=xx;//存坐标
zb[ans][1]=yy;
dfs(xx,yy);
}
}
int main(){
cin>>n>>m;
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++)
cin>>mg[i][j];
}
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
if(st[i][j]==0){//搜连通块
st[i][j]=1;
ans=1;
zb[1][0]=i;
zb[1][1]=j;
dfs(i,j);
for(int k=1;k<=ans;k++){//存答案
Ans[zb[k][0]][zb[k][1]]=ans;
}
}
}
}
int a,b;
while(m--){
cin>>a>>b;
cout<<Ans[a][b]<<endl;
}
}
注意:
存图的时候看看给的图有没有连起来,这样判断数组用int还是char。
相关文章:
dfs专题(记忆化搜索)P1141 01迷宫——洛谷(题解)
题目描述 有一个仅由数字 00 与 11 组成的 ��nn 格迷宫。若你位于一格 00 上,那么你可以移动到相邻 44 格中的某一格 11 上,同样若你位于一格 11 上,那么你可以移动到相邻 44 格中的某一格 00 上。 你的任务是&#…...
pip 安装出现报错 SSLError(SSLError(“bad handshake
即使设置了清华源: pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simplepip 安装包不能配置清华源,出现报错: Retrying (Retry(total2, connectNone, readNone, redirectNone, statusNone)) after connection broken by ‘SSLE…...
新概念英语第二册(46)
【New words and expressions】生词和短语(12) unload v. 卸(货) wooden adj. 木制的 extremely adv. 非常,极其 occur …...
动态规划入门题目
动态规划(记忆化搜索): 将给定问题划分成若干子问题,直到子问题可以被直接解决。然后把子问题的答保存下来以免重复计算,然后根据子问题反推出原问题解的方法 动态规划也称为递推(暴力深搜记忆中间状态结果…...
探索云性能测试的各项功能有哪些?
云性能测试作为现代软件开发和部署过程中不可或缺的一环,为确保系统在各种条件下的高效运行提供了关键支持。本文将介绍云性能测试的各项功能,帮助您更好地了解其在软件开发生命周期中的重要性。 1. 负载测试 云性能测试的首要功能之一是负载测试。通过模…...
(大众金融)SQL server面试题(1)-总销售量最少的3个型号的车及其总销售量
今天,面试了一家公司,什么也不说先来三道面试题做做,第一题。 那么,我们就开始做题吧,谁叫我们是打工人呢。 题目是这样的: 统计除豪车外,销售最差的车 车辆按批销售,每次销售若干…...
Git安装,Git镜像,Git已安装但无法使用解决经验
git下载地址: Git - 下载 (git-scm.com) <-git官方资源 Git for Windows (github.com) <-github资源 CNPM Binaries Mirror (npmmirror.com) <-阿里镜像(推荐,镜…...
Python与CAD系列高级篇(二十五)分类提取坐标到excel(补充圆半径、线长度、圆弧)
目录 0 简述1 分类提取坐标到excel2 结果展示0 简述 上一篇中介绍了:对点、直线、多段线、圆、样条曲线分类读取坐标并提取到excel。考虑到进一步提取图形信息,此篇补充对圆半径、线长度以及圆弧几何信息的提取。 1 分类提取坐标到excel 代码实现: import math import nump…...
Linux安装Influxdb
Linux安装Influxdb 1、安装步骤1.1、安装Influxdb步骤1.2、Influxdb默认安装路径1.3、命令行操作Influxdb,建库,建用户1.3.1 进入influxdb命令行1.3.2 创建用户1.3.2 库查询和创建 1、安装步骤 1.1、安装Influxdb步骤 yum install -y wget #下载安装包…...
Flutter CustomPainter 属性介绍与使用
Flutter 中的 CustomPainter 是一个强大的工具,允许开发者通过自定义绘制来创建各种复杂的图形和动画。本文将介绍 CustomPainter 的一些重要属性以及如何使用它们来实现自定义绘制。 1. CustomPainter 简介 CustomPainter 是一个抽象类,用于自定义绘制…...
基于Javaweb开发的二手图书零售系统详细设计【附源码】
基于Javaweb开发的二手图书零售系统详细设计【附源码】 🍅 作者主页 央顺技术团队 🍅 欢迎点赞 👍 收藏 ⭐留言 📝 🍅 文末获取源码联系方式 📝 🍅 查看下方微信号获取联系方式 承接各种定制系统…...
【JaveWeb教程】(35)SpringBootWeb案例之《智能学习辅助系统》登录功能的详细实现步骤与代码示例(8)
目录 案例-登录和认证1. 登录功能1.1 需求1.2 接口文档1.3 思路分析1.4 功能开发1.5 测试 案例-登录和认证 在前面的课程中,我们已经实现了部门管理、员工管理的基本功能,但是大家会发现,我们并没有登录,就直接访问到了Tlias智能…...
6.1 内存模式概述
Bruce Powel Douglass大师介绍-CSDN博客 嵌入式软件开发从小工到专家-CSDN博客 C嵌入式编程设计模式源码-CSDN博客 “内存管理模式”介绍了几种内存管理的模式,每种模式都针对特定的系统需求和约束设计。 6.2 静态分配模式(Static Allocation Patter…...
Python中容器类型的数据
目录 序列 序列的索引操作 加和乘操作 切片操作 成员测试 列表 创建列表 追加元素 插入元素 替换元素 删除元素 元组 创建元组 元组拆包 集合 创建集合 修改集合 字典 创建字典 修改字典 访问字典视图 遍历字典 若我们想将多个数据打包并且统一管理&…...
虚拟机安装Centos8.5
记得看目录哦! 附件1. 新建虚拟机2. 安装Centos8.5 附件 安装包自行下载 https://mirrors.aliyun.com/centos/8/isos/x86_64/ 1. 新建虚拟机 2. 安装Centos8.5 启动虚拟机–选择第一个install Centos8.5 记得接收许可证...
ENVI下基于知识决策树提取地表覆盖信息
基于知识的决策树分类是基于遥感影像数据及其他空间数据,通过专家经验总结、简单的数学统计和归纳方法等,获得分类规则并进行遥感分类。分类规则易于理解,分类过程也符合人的认知过程,最大的特点是利用的多源数据。 决策树分类主要的工作是获取规则,本文介绍使用CART算法…...
arco design table遇到的一些问题
问题1:不知情就成了树形table table中不知道为啥就多了个树形加号在前面,查找问题后发现,是后端返回的数据中有children,框架中默认对这个参数做了树形结构。 解决办法: 当时没找到取消或者修改字段的属性或方法&…...
Linux系统——文本三剑客
目录 一、grep 1.格式 2.选项 2.1 grep重定向 2.2grep -m 匹配到几次停止 2.3grep -i 忽略大小写 2.4grep -n 显示行号 2.5grep -c 统计匹配行数 2.6grep -A 后几行 2.7grep -C 前后三行 2.8grep -B 前三行 2.9grep -e 或 2.10grep -w 匹配整个单词 2.11grep -r…...
代码随想录算法训练营Day38|动态规划理论基础、509. 斐波那契数、70. 爬楼梯、746. 使用最小花费爬楼梯
目录 动态规划理论基础 什么是动态规划 动态规划的解题步骤 动态规划的debug 509. 斐波那契数 前言 思路 算法实现 方法一:动态规划 方法二:递归法 70. 爬楼梯 前言 思路 算法实现 拓展 746. 使用最小花费爬楼梯 算法实现 总结 动态规划…...
C++中的指针空值nullptr
一、nullptr的引入 在C98中,通常是用NULL或者0对指针变量进行初始化 int* p1 NULL; int* p2 0; NULL其实一个宏,本质是0,在传统C头文件stddef.h中给可以看到如下代码 #ifndef NULL #ifdef __cplusplus #define NULL 0 #else #define …...
【Linux】shell脚本忽略错误继续执行
在 shell 脚本中,可以使用 set -e 命令来设置脚本在遇到错误时退出执行。如果你希望脚本忽略错误并继续执行,可以在脚本开头添加 set e 命令来取消该设置。 举例1 #!/bin/bash# 取消 set -e 的设置 set e# 执行命令,并忽略错误 rm somefile…...
shell脚本--常见案例
1、自动备份文件或目录 2、批量重命名文件 3、查找并删除指定名称的文件: 4、批量删除文件 5、查找并替换文件内容 6、批量创建文件 7、创建文件夹并移动文件 8、在文件夹中查找文件...
DockerHub与私有镜像仓库在容器化中的应用与管理
哈喽,大家好,我是左手python! Docker Hub的应用与管理 Docker Hub的基本概念与使用方法 Docker Hub是Docker官方提供的一个公共镜像仓库,用户可以在其中找到各种操作系统、软件和应用的镜像。开发者可以通过Docker Hub轻松获取所…...
java调用dll出现unsatisfiedLinkError以及JNA和JNI的区别
UnsatisfiedLinkError 在对接硬件设备中,我们会遇到使用 java 调用 dll文件 的情况,此时大概率出现UnsatisfiedLinkError链接错误,原因可能有如下几种 类名错误包名错误方法名参数错误使用 JNI 协议调用,结果 dll 未实现 JNI 协…...
大语言模型如何处理长文本?常用文本分割技术详解
为什么需要文本分割? 引言:为什么需要文本分割?一、基础文本分割方法1. 按段落分割(Paragraph Splitting)2. 按句子分割(Sentence Splitting)二、高级文本分割策略3. 重叠分割(Sliding Window)4. 递归分割(Recursive Splitting)三、生产级工具推荐5. 使用LangChain的…...
华为OD机试-食堂供餐-二分法
import java.util.Arrays; import java.util.Scanner;public class DemoTest3 {public static void main(String[] args) {Scanner in new Scanner(System.in);// 注意 hasNext 和 hasNextLine 的区别while (in.hasNextLine()) { // 注意 while 处理多个 caseint a in.nextIn…...
视频行为标注工具BehaviLabel(源码+使用介绍+Windows.Exe版本)
前言: 最近在做行为检测相关的模型,用的是时空图卷积网络(STGCN),但原有kinetic-400数据集数据质量较低,需要进行细粒度的标注,同时粗略搜了下已有开源工具基本都集中于图像分割这块,…...
【无标题】路径问题的革命性重构:基于二维拓扑收缩色动力学模型的零点隧穿理论
路径问题的革命性重构:基于二维拓扑收缩色动力学模型的零点隧穿理论 一、传统路径模型的根本缺陷 在经典正方形路径问题中(图1): mermaid graph LR A((A)) --- B((B)) B --- C((C)) C --- D((D)) D --- A A -.- C[无直接路径] B -…...
Golang——9、反射和文件操作
反射和文件操作 1、反射1.1、reflect.TypeOf()获取任意值的类型对象1.2、reflect.ValueOf()1.3、结构体反射 2、文件操作2.1、os.Open()打开文件2.2、方式一:使用Read()读取文件2.3、方式二:bufio读取文件2.4、方式三:os.ReadFile读取2.5、写…...
Bean 作用域有哪些?如何答出技术深度?
导语: Spring 面试绕不开 Bean 的作用域问题,这是面试官考察候选人对 Spring 框架理解深度的常见方式。本文将围绕“Spring 中的 Bean 作用域”展开,结合典型面试题及实战场景,帮你厘清重点,打破模板式回答,…...
