[Daimayuan] 走不出的迷宫(C++,图论,DP)
有一个 H H H 行 W W W 列的迷宫(行号从上到下是 1 − H 1−H 1−H,列号从左到右是 1 − W 1−W 1−W),现在有一个由 . 和 # 组成的 H 行 W 列的矩阵表示这个迷宫的构造,. 代表可以通过的空地,# 代表不能通过的墙。
现在有个人从 起点 ( 1 , 1 ) (1,1) (1,1) 开始走,他每一步只能往右走一格或者往下走一格,并且他不能跨越迷宫的边界。他会一直走,直到没有可以走的路时停下来。
请问这个人最多可以经过多少个格子?
输入格式
第一行两个整数 H H H, W W W,表示迷宫有 H H H 行 W W W 列。
接下来一个 H H H 行 W W W 列的由 . 和 # 组成的矩阵,表示迷宫的构造。
注意:保证 ( 1 , 1 ) (1,1) (1,1) 的位置一定是 .。
输出格式
一个整数,表示最多步数。
样例输入1
3 4
.#..
..#.
..##
样例输出1
4
样例输入2
1 1
.
样例输出2
1
样例输入3
5 5
.....
.....
.....
.....
.....
样例输出3
9
数据规模
对于全部数据保证 1 ≤ H , W ≤ 100 1≤H,W≤100 1≤H,W≤100
解题思路
主体思路为动态规划,时间复杂度为 O ( H ∗ W ) O(H*W) O(H∗W)。
由题意可知,我们到达一个格子的方式只有从左边和上边到达两种情况,那么我们就继承这两种情况中步数更多的一种 + 1 +1 +1来更新:
sum[i][j] = max(sum[i - 1][j], sum[i][j - 1]) + 1;
采用二重循环遍历整张图,由循环顺序,显而易见:在我们到达(i, j)之前,已经到达了(i - 1, j)和(i, j - 1)。
for (int i = 1; i <= h; i++) {for (int j = 1; j <= w; j++) {sum[i][j] = max(sum[i - 1][j], sum[i][j - 1]) + 1;}
}
但是需要注意两点:
(1)注意障碍物的存在,以下代码采用的方式是掩码把墙的sum置为 0 0 0;
(2)注意寻找最大步数时还需要进行一次 B F S BFS BFS,因为我们可能到达不了某些格子,从而导致我们得到的答案并不是sum数组中的最大值。
AC代码如下:
#include <iostream>
#include <queue>
using namespace std;
const int max_h = 100;
const int max_w = 100;bool map[max_h + 1][max_w + 1], book[max_h][max_w];
long long sum[max_h + 1][max_w + 1];
long long h, w, ans = 1;
struct node { int x, y; };
queue<node>q;inline void read() {string str;cin >> h >> w;for (int i = 1; i <= h; i++) {cin >> str;for (int j = 1; j <= w; j++) {if (str[j - 1] == '.') map[i][j] = true;else map[i][j] = false;}}
}void bfs() {q.push(node{ 1,1 });book[1][1] = true;int step[2][2] = { {1,0}, {0,1} }, temp_x, temp_y;while (!q.empty()) {node temp = q.front(); q.pop();for (int i = 0; i < 2; i++) {temp_x = step[i][0] + temp.x;temp_y = step[i][1] + temp.y;if (temp_x > h || temp_y > w) continue;if (!map[temp_x][temp_y]) continue;if (book[temp_x][temp_y]) continue;q.push(node{ temp_x,temp_y });book[temp_x][temp_y] = true;ans = max(ans, sum[temp_x][temp_y]);}}
}inline void solve() {for (int i = 1; i <= h; i++) {for (int j = 1; j <= h; j++) {sum[i][j] = max(sum[i - 1][j] * map[i - 1][j],sum[i][j - 1] * map[i][j - 1]) + 1;}}bfs();cout << ans << endl;
}int main() {read();solve();return 0;
}相关文章:
[Daimayuan] 走不出的迷宫(C++,图论,DP)
有一个 H H H 行 W W W 列的迷宫(行号从上到下是 1 − H 1−H 1−H,列号从左到右是 1 − W 1−W 1−W),现在有一个由 . 和 # 组成的 H 行 W 列的矩阵表示这个迷宫的构造,. 代表可以通过的空地,# 代表不…...
【LeetCode: 1416. 恢复数组 | 暴力递归=>记忆化搜索=>动态规划 】
🚀 算法题 🚀 🌲 算法刷题专栏 | 面试必备算法 | 面试高频算法 🍀 🌲 越难的东西,越要努力坚持,因为它具有很高的价值,算法就是这样✨ 🌲 作者简介:硕风和炜,…...
centos7查看磁盘io
1.查看所使用到的命令为iostat,centos7没有自带iostat,需要安装一下 2.安装iostat命令 yum -y install sysstat 3.使用iostat命令 iostat %user:表示用户空间进程使用 CPU 时间的百分比 %nice:表示用户空间进程以降低优先级的…...
浅析低代码开发的典型应用构建场景v
在数字经济蓬勃发展的大势之下,企业软件开发人员供给不足、开发速度慢、开发成本高、数字化和智能化成效不明显等问题日益凸出,阻碍了企业的数字化转型。 而近年来,低代码的出现推动了经济社会的全面提效,也成为人才供求矛盾的润…...
3 连续模块(二)
3.5 零极点增益模块 在控制系统设计和分析中,常用的函数包括 传递函数(tf)、零极点(zpk)和状态空间(ss)函数 传递函数(tf):用于表示线性时不变系统的输入输出…...
ElasticSearch 部署及安装ik分词器
ansiable playbook链接: https://download.csdn.net/download/weixin_43798031/87719490 需要注意的点:公司es集群现以三个角色部署分别为 Gateway、Master、Data 简单的理解可以理解为在每台机器上部署了三个es,以端口和配置文件来区分这三…...
汽车充电桩检测设备TK4860C交流充电桩检定装置
TK4860C是一款在交流充电桩充电过程中实时检测充电电量的标准仪器,仪器以新能源车为负载,结合宽动态范围测量技术、电能ms级高速刷新等技术,TK4860C实现充电全过程的累积电能精准计量,相比于传统的预设检定点的稳态计量࿰…...
备份和恢复:确保数据安全
备份和恢复:确保数据安全 在计算机领域中,备份和恢复数据对于确保数据安全至关重要。本文将介绍备份策略概述、使用mysqldump进行备份、使用MySQL Enterprise Backup进行备份、恢复数据以及备份和恢复的最佳实践。 备份策略概述 在制定备份策略时&…...
8 DWA(一)
8 DWA DMA简介 DMA(Direct Memory Access)直接存储器存取(可以直接访问32内部存储器,包括内存SRAM,Flash) DMA可以提供外设和存储器或者存储器和存储器之间的高速数据传输,无须CPU干预&#x…...
mysql慢查询日志
概念 MySQL的慢查询日志是MySQL提供的一种日志记录,它用来记录在MySQL中响应时间超过阀值的语句,具体指运行时间超过long_query_time值的SQL,则会被记录到慢查询日志中。long_query_time的默认值为10,意思是运行10秒以上的语句。…...
Sentinel介绍及搭建
分布式流量防护 服务雪崩 服务提供者不可用导致服务调用者也跟着不可用,以此类推引起整个链路中的所有微服务都不可用 分布式流量防护 在分布式系统中,服务之间的相互调用会生成分布式流量。如何通过组件进行流量防护,并有效控制流量&…...
最受信任的低代码平台排行榜
近年来,随着数字化转型的兴起,低代码平台获得了大量关注。它允许用户在几乎没有编码知识的情况下创建应用程序,从而使企业能够简化其流程并提高效率。随着低代码平台的日益流行,要确定哪些平台最可靠、最值得信赖并非易事。在本文…...
Django框架之创建项目、应用并配置数据库
django3.0框架创建项目、应用并配置数据库 创建项目 进入命令行 新建一个全英文的目录 进入目录 输入命令 django-admin startproject project 项目目录层级 查看当前目录层级 tree /f 目录文件说明 创建数据库 做一个学生管理系统做演示,使用navicat创建数据…...
软件测试之基础概念学习篇(需求 + 测试用例 + 开发模型 + 测试模型 + BUG)
文章目录 1. 什么是软件测试2. 软件测试和软件开发的区别3. 软件测试和软件调试的区别4. 什么是需求1)以需求为依据设计测试用例 5. 测试用例是什么6. 什么是 BUG(软件错误)7. 五个开发模型1)瀑布模型2)螺旋模型3&…...
Windows下版本控制器(SVN) - 1、开发中的实际问题+2、版本控制简介
文章目录 基础知识-Windows下版本控制器(SVN)1、开发中的实际问题2、版本控制简介2.1 版本控制[Revision control]2.2 Subversion2.3 Subversion 的优良特性2.4 SVN 的工作原理:2.5 SVN 基本操作 本人其他相关文章链接 基础知识-Windows下版本控制器(SVN) 1、开发中…...
Learning Dynamic Facial Radiance Fields for Few-Shot Talking Head Synthesis 笔记
Learning Dynamic Facial Radiance Fields for Few-Shot Talking Head Synthesis 笔记 摘要 Talking head synthesis is an emerging technology with wide applications in film dubbing, virtual avatars and online education. Recent NeRF-based methods generate more n…...
SpringBoot 项目整合 Redis 教程详解
✅作者简介:2022年博客新星 第八。热爱国学的Java后端开发者,修心和技术同步精进。 🍎个人主页:Java Fans的博客 🍊个人信条:不迁怒,不贰过。小知识,大智慧。 💞当前专栏…...
3ASC25H214 DATX130以力控制为基础的装配应用方面已经形成了一个解决方案
3ASC25H214 DATX130以力控制为基础的装配应用方面已经形成了一个解决方案 ABB的机器人解决方案最终选择了IRB6400机器人 ABB的解决方案 ABB一直都在不断地研究和开发机器人应用的新技术,有一部分研究活动是与大学进行合作的,其中一项是ABB的科学家和…...
Java的位运算
目录 1 Java中支持的位运算 2 位运算规则 3 逻辑运算 3.1 与运算(&) 3.2 或运算(|) 3.3 异或运算(^) 3.3 取反运算(~) 4 位移操作 4.1 左移(<<&#…...
FastDFS分布式文件存储
FastDFS文件上传 简介: 主要解决:大容量的文件存储和高并发访问的问题 论坛:https://bbs.chinaunix.net 下载网站:https://sourceforge.net/projects/fastdfs/files/ 安装参考:https://www.cnblogs.com/cxygg/p/1…...
AI艺术创作大赛:Shadow Sound Hunter生成作品展示
AI艺术创作大赛:Shadow & Sound Hunter生成作品展示 1. 引言 最近参加了一场AI艺术创作大赛,用Shadow & Sound Hunter模型生成了不少有意思的作品。这个模型在数字绘画、诗歌创作和音乐编曲方面都表现出色,让我看到了AI在艺术创作领…...
2026 API 中转平台选型报告:从冗余性到工程效率
1. 4SAPI —— 商业生产的“压舱石”4SAPI 在 2026 年的技术站位极其稳固,主要得益于其对**企业级 SLA(服务等级协议)**的严苛执行。核心逻辑:其底层架构采用了类似多云 CDN 的分发机制。当上游官方接口(如 OpenAI 或 …...
m4s-converter:释放B站缓存价值的格式转换利器
m4s-converter:释放B站缓存价值的格式转换利器 【免费下载链接】m4s-converter 一个跨平台小工具,将bilibili缓存的m4s格式音视频文件合并成mp4 项目地址: https://gitcode.com/gh_mirrors/m4/m4s-converter 价值对比:格式转换前后的效…...
FedoraWorkstation43安装中州韵(ibus-rime)输入法引擎+雾凇拼音+万象语言模型
1、安装ibus-rime sudo dnf install ibus-rime librime-devel librime-tools librime-lua2、使用东风破工具安装雾凇 cd ~/ git clone https://github.com/rime/plum.git plum cd plum bash rime-install iDvel/rime-ice:others/recipes/full # 更多参考 https://github.com/iD…...
OpenClaw如何实现数据可视化
要实现数据可视化,OpenClaw 主要通过以下几种方式,您可以根据需求选择合适的方法: 📊 1. 使用内置的 visualizerAgent OpenClaw 内置了 agent:visualizer,可直接从 CSV 等文件生成交互式 HTML 仪表盘(如折…...
别再只会让舵机转圈了!用Arduino和SG90实现精准角度控制的保姆级教程
从转圈到精准控制:Arduino与SG90舵机的高级应用指南 第一次接触舵机时,我们往往满足于让它简单地来回转动——这确实很有趣,就像给玩具注入了生命。但当你真正想用它构建一个机械臂、智能云台或是自动喂食器时,这种粗放的控制方式…...
升级版会议纪要录音转文字工具 识别准转得快 整理省事体验好
前前后后踩过不下10款录音转写工具的坑,要么错字多到要逐行改,要么转出来的内容逻辑混乱,得花好几个小时捋顺,直到用到2026升级版的会议纪要录音转文字工具,才真的感受到什么叫识别准、转得快、整理省事体验好。今早开…...
3.多表关联在电商数据分析中的核心价值
多表关联在电商数据分析中的核心价值 第1章 多表关联、子查询与行列转换在电商数据分析中的核心价值 1.1 为什么单表查询不够用 我刚开始做数据分析的时候,以为SQL就是在一张表上做筛选和汇总。直到有一天,运营问我:“这批高价值用户…...
LumiPixel Canvas Quest集成Vue.js:打造动态人像画廊管理后台
LumiPixel Canvas Quest集成Vue.js:打造动态人像画廊管理后台 1. 项目背景与需求分析 在数字内容创作领域,AI生成人像正成为设计师和内容创作者的重要工具。传统人工绘制方式耗时费力,而直接使用AI生成工具又缺乏系统化管理。我们团队最近用…...
基于python宠物医院药品管理系统的设计与实现
目录同行可拿货,招校园代理 ,本人源头供货商功能模块设计技术实现要点扩展功能建议项目技术支持源码获取详细视频演示 :文章底部获取博主联系方式!同行可合作同行可拿货,招校园代理 ,本人源头供货商 功能模块设计 药品信息管理模块 实现药品基础信息的…...
