当前位置: 首页 > news >正文

一个BFS的trick

前言

感觉这个一个典中典典做法,但是我还是不会()

今天第二次遇到这个问题(上一次的找不到了),所以记录一下做法

CF2041D Drunken Maze

思路

对于在走迷宫的基础上加入“不能连续往一个方向走 \(k\) 步”限制的问题,一般做法是为 BFS 的状态设置条件。类似于

\[\{x, y, last, cnt\} \]

其中 \(x, y\) 表示位置, \(last\) 表示上一步的方向, \(cnt\) 表示在这个方向上走了多少步。所以初始状态就是 \(\{start x, starty, -1, 0\}\) ,当然在跑 BFS 的过程中要记录一下距离 \(dis\) 。相应的记录当前状态是否触发过的 \(vis\) 数组也要记录这四个属性。但是直接开四维数组容易 MLE,因此可以压缩一下状态。

代码

struct state {int x, y, last, cnt, dis;
};void solve(void) {int n, m;std::cin >> n >> m;state start;int ex = 0, ey = 0;std::vector<std::vector<char>> G(n + 1, std::vector<char>(m + 1));for(int i = 1; i <= n; i++) {for(int j = 1; j <= m; j++) {std::cin >> G[i][j];if(G[i][j] == 'S') {start.x = i; start.y = j;}if(G[i][j] == 'T') {ex = i, ey = j;}} }start.cnt = 0; start.last = -1; start.dis = 0;std::vector<int> vis(n * m * 4 * 4 + 1);auto compress = [&](int x, int y, int d, int cnt) -> int {return ((x * m + y) * 4 + d) * 4 + cnt;};auto bfs = [&](void) -> int {std::queue<state> q;q.push(start);while(q.size()) {auto u = q.front(); q.pop();if(u.x == ex && u.y == ey) {return u.dis;}for(int d = 0; d < 4; d++) {int x = u.x + dx[d];int y = u.y + dy[d];if(x > n || x < 1 || y > m || y < 1 || G[x][y] == '#') continue;int cnt = u.cnt;if(d == u.last) {if(u.cnt == 3) continue;cnt++;} else cnt = 1;int id = compress(x, y, d, cnt);if(!vis[id]) {vis[id] = true;q.emplace(x, y, d, cnt, u.dis + 1);}}}return -1;};std::cout << bfs() << '\n';
}
http://www.zskr.cn/news/39867.html

相关文章:

  • 2025 年 11 月股权设计财税合规公司推荐排行榜,股权架构设计,财税合规方案,企业股权激励,税务筹划公司推荐
  • RCE漏洞基础以及绕过
  • 详细介绍:数据结构:树
  • 关于嵌入式硬件需要了解的基础知识 - 教程
  • 从零到一:我的开源AI商业化实战之路
  • DesignSpark Mechanical (DSM)输入用户名密码提示在注册过程中发生错误
  • P14364 [CSP-S 2025] 员工招聘 / employ 笔记
  • python爬虫scrapy框架使用 - 教程
  • 2025年剪叉升降平台供应商权威推荐榜单:车载剪叉式升降平台/移动剪叉式升降平台车/轨道升降平台源头厂家精选
  • 2025 年水质测定仪厂家最新推荐榜:解析科技等企业实力剖析与选购参考养殖/便携式总磷总氮/余氯总氯/废水水质测定仪公司推荐
  • 2025年11月沼气直燃品牌/品牌排名前十:技术实力对比与总结
  • Serilog日志库简单实践(一):控制台与调试Sinks(.NET 8)汇报总结
  • 2025年低噪音冷却塔实力厂家权威推荐榜单:工业冷却塔/防腐蚀冷却塔/冷却塔填料源头厂家精选
  • 2025年11月火焰检测供应商Top10权威推荐榜:海德测控居首
  • 新麦分销商城小程序系统:一站式分销零售解决方案
  • poi-tl导出word复杂表格(单元格合并,生成复杂表格)
  • 小程序平台分账功能从开始到落地的完整解析
  • Hutool(Excel工具使用)
  • 2025年哈尔滨家装行业口碑榜:为尚装饰的安全保障如何
  • 吴恩达深度学习课程二: 改善深层神经网络 第一周:深度学习的实践(六)梯度现象和梯度检验
  • Tita项目管理:中小型企业的最佳选择
  • 2025年柔性门制造商权威推荐榜单:柔性堆积门/柔性提升门/工业柔性门源头厂家精选
  • 2025年卷绕铁心定制厂家权威推荐榜单:卷铁心/开口卷铁芯/卷铁芯源头厂家精选
  • TSJY-26M
  • 2025年11月候车亭/公交站台//电子站牌/公交站牌/公交候车厅厂家推荐榜: 领导者江苏兰太城市科技行业分析
  • expect 免交互
  • 2025年乙酸甲酯实力厂家权威推荐榜单:醋酸乙烯酯/乙二醇苯醚/苯氧基乙醇源头厂家精选
  • 2025年宁夏越南专线运输平台权威推荐榜单:新疆中越专线物流/北京越南货运/天津越南国际物流源头公司精选
  • pikachu靶场 sql注入
  • 查看GPU显卡架构及计算能力