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

P1825 [USACO11OPEN] Corn Maze S

P1825 [USACO11OPEN] Corn Maze S

题解:

用广度优先搜索(BFS)。每次从队列取出当前格子,向四个方向尝试:

如果是墙或越界,跳过;

如果是普通格子且未访问,标记距离/访问并入队;

如果是大写字母,找到同字母的另一个端点(传送终点),把传送终点当作下一步入队(并标记已访问/距离)。

注意,这里不把“传送起点格”本身标记为已访问,而是把传送的目标端点标记为访问/距离。

这题题目描述有问题:

我最开始认为传送后就只能移动到普通草地,然后才能再次传送。
不过,题目中的描述是防止在两个 A 间反复横跳。
从一个 A 传送到另一个 A ,然后移动到 B ,这一步也算移动,所以 **可以立即使用 B **

比如下面这个用例:

6 7
#=#####
#ABCDE#
#ABCDE#
#ZXYV.#
#VYXZ@#
#######

走的路线是Z -> A -> 目的地=, 只需要3步

代码如下:

点击查看代码
#include <bits/stdc++.h>
using namespace std;
const int N=310;
const int INF = 1e9;
int n, m;
char a[N][N];
int dx[]={-1, 1, 0, 0};
int dy[]={0, 0, 1, -1};
int sx, sy, ex, ey;
// 记录每个大写字母的两个端点
vector<tuple<int,int>> pos[26];
int dista[N][N];//记录距离,同时起到vis[]去重的作用int main()
{cin>>n>>m;for(int i=1;i<=n;i++)for(int j=1;j<=m;j++){char c; cin>>c;a[i][j]=c;if(c=='@') sx=i, sy=j;else if(c=='=') ex=i, ey=j;else if(isupper(c)){pos[c - 'A'].push_back({i, j});}}// 初始化距离for (int i = 1; i <= n; i++)for (int j = 1; j <= m; j++)dista[i][j] = INF; queue<tuple<int, int>> q;dista[sx][sy]=0;q.push({sx, sy}); while(!q.empty()){auto [x, y] = q.front(); q.pop();// printf("%c %d %d %d\n", a[x][y], x, y, dista[x][y]);if(a[x][y] == '=') {   cout<<dista[x][y];exit(0);}for(int i=0;i<4;i++){int nx = x + dx[i];int ny = y + dy[i];if (nx < 1 || nx > n || ny < 1 || ny > m) continue;if (a[nx][ny] == '#') continue;//滑梯if(isupper(a[nx][ny])){int id = a[nx][ny] - 'A';// 找到另一个端点for (auto [xx, yy] : pos[id]) {if (xx != nx || yy != ny) {if(dista[xx][yy]!=INF) continue;//另一端已访问dista[xx][yy]=dista[x][y]+1;//只需要标记另一端q.push({xx, yy});//  printf("a[nx][ny] %c %d %d %d ——> %d %d %d\n",a[nx][ny], nx, ny, dista[x][y], xx, yy, dista[xx][yy]);}}} //草地else{if(dista[nx][ny]!=INF) continue;//已访问dista[nx][ny]=dista[x][y]+1;q.push({nx, ny});}}}cout<<-1<<"\n";return 0;
}
http://www.jsqmd.com/news/199371/

相关文章:

  • 淘宝商品SKU规格信息获取指南及item_skuAPI开放接口详解
  • PerfView性能分析工具完整指南:高效诊断应用瓶颈
  • 5分钟精通RoseTTAFold:2025年蛋白质结构预测实战指南
  • 个人Vlog配音神器:IndexTTS 2.0轻松实现个性化旁白生成
  • 5分钟搞定IDM完整功能体验:免费使用下载工具
  • 题单 1.5 hwy
  • 群晖NAS第三方硬盘兼容性深度解锁指南:从问题诊断到性能优化
  • 蔚来汽车 NOMI:IndexTTS 2.0提供更具情感的车载语音
  • 多视几何理论的核心内容
  • 网络安全完全指南:一份为你梳理好的体系化知识地图,助你梦想扬帆起航
  • 阿联酋Medcare成功为首位国际脊髓性肌萎缩症(SMA)患者实施革命性的鞘内基因治疗
  • 内容水印技术应用:为IndexTTS 2.0生成音频添加隐式标识
  • 【限时关注】Dify + Next.js 安全危机(仅剩3天修复窗口期)
  • Arctium启动器深度解析:自定义服务器连接终极方案
  • 中文语音合成哪家强?对比Fish-Speech、PaddleSpeech与IndexTTS 2.0
  • 【20年经验总结】Dify Excel内存调优实战:从崩溃到流畅只需这6步
  • 4大核心模块解析:掌握Dalamud框架打造FF14专属游戏助手
  • GB/T 7714—2015 CSL样式一键配置与高效应用完整指南
  • Winhance技术解析:基于PowerShell的Windows系统优化框架实践
  • 解锁苹果触控板Windows潜能:精准触控驱动深度配置指南
  • 为什么你的Dify+Excel这么耗内存?,仅限内部流传的4大调优法则首次公开
  • 【高危漏洞修复】Dify 1.11.1补丁安装技术白皮书首次披露
  • Path of Building PoE2:从新手到专家的5步构建指南
  • Kodi PVR IPTV Simple 完全掌握指南:7天从入门到精通的实战手册
  • Path of Building PoE2构建规划完全指南:从基础操作到专业优化
  • AI写作加速器:9大权威提示词合集+高效生成方案解析
  • 粉丝共创内容激励:允许用户用偶像声线生成二创音频
  • Spotify音乐下载终极指南:免费将歌单转为本地MP3文件
  • CentOS-WSL快速上手:Windows上的企业级Linux环境
  • ‌从零开始构建AI测试流水线