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 …...
项目介绍 MATLAB实现基于贝尔曼方程(Bellman)进行无人机三维路径规划的详细项目实例(含模型描述及部分示例代码) 专栏近期有大量优惠 还请多多点一下关注 加油 谢谢 你的鼓励是我前行的动力
MATLAB实现基于贝尔曼方程(Bellman)进行无人机三维路径规划的详细项目实例 更多详细内容可直接联系博主本人 或者访问对应标题的完整博客或者文档下载页面(含完整的程序,GUI设计和代码详解) 无人机作为现代智能系统…...
公开信息整理|2026年4月4日:消费复苏、金融调节、教育规范、科技安全与部分国际动态速览
🔥个人主页:杨利杰YJlio❄️个人专栏:《Sysinternals实战教程》《Windows PowerShell 实战》《WINDOWS教程》《IOS教程》《微信助手》《锤子助手》 《Python》 《Kali Linux》 《那些年未解决的Windows疑难杂症》🌟 让复杂的事情更…...
Git 仓库搬家后,如何让本地仓库“认新家”?——小白也能看懂的远程地址修改指南
Git 仓库搬家后,如何让本地仓库“认新家”?——小白也能看懂的远程地址修改指南 一句话总结:当你的 Git 仓库迁移到新地址后,只需更新本地仓库的“通讯录”,并告诉 Git “以后默认推送到新家”,即可无缝切换…...
3大创新突破:Element-Plus-X助力企业级AI交互应用的实战指南
3大创新突破:Element-Plus-X助力企业级AI交互应用的实战指南 【免费下载链接】Element-Plus-X Enterprise-level AI component library front-end solution 🤖 项目地址: https://gitcode.com/gh_mirrors/el/Element-Plus-X 在数字化转型加速的今…...
C 里面如何使用链表 list
1. 学生时代, 那会学习 C 数据结构, 比较简单 struct person {int id;char name[641];struct person * next; }; 类似上面这样, 需要什么依赖 next 指针来回调整, 然后手工 print F5 去 debug 熬. 2. 刚工作青年时代, 主要花活, 随大流类似 #pragma once#include "stru…...
如何用低代码工作流解决业务流程自动化难题:从设计到落地的实践指南
如何用低代码工作流解决业务流程自动化难题:从设计到落地的实践指南 【免费下载链接】Awesome-Dify-Workflow 分享一些好用的 Dify DSL 工作流程,自用、学习两相宜。 Sharing some Dify workflows. 项目地址: https://gitcode.com/GitHub_Trending/aw/…...
OpenClaw搭建方法:2026年本地环境部署、配置大模型百炼APIKey、集成Skill、接入多平台
OpenClaw搭建方法:2026年本地环境部署、配置大模型百炼APIKey、集成Skill、接入多平台。OpenClaw(原Clawdbot)作为2026年主流的AI自动化助理平台,可通过阿里云轻量服务器实现724小时稳定运行,并快速接入钉钉࿰…...
3步终极修复方案:拯救损坏的直播录制文件
3步终极修复方案:拯救损坏的直播录制文件 【免费下载链接】BililiveRecorder 录播姬 | mikufans 生放送录制 项目地址: https://gitcode.com/gh_mirrors/bi/BililiveRecorder 直播录制时最令人头疼的是什么?不是网络波动,不是主播下播…...
实战应用:基于快马AI构建openclaw101官网从登录到跳转的完整流程
今天想和大家分享一个基于InsCode(快马)平台实现的登录系统实战案例。这个项目模拟了openclaw101官网从登录到跳转的完整流程,特别适合想学习前后端交互的同学参考。 项目整体架构 这个登录系统采用经典的前后端分离设计。前端使用纯HTMLCSSJavaScript实现页面交互&…...
AI专著撰写大揭秘:实用工具深度解读,轻松打造学术佳作
撰写学术专著不仅考验研究者的学术能力,同样是对心理承受力的挑战。与可以通过团队合作完成的论文写作不同,专著的创作通常是“独自一人”的过程。从选定主题、搭建框架到具体的内容撰写和修改,每一个环节几乎都需要研究者亲自完成。长期处于…...
