Description

今年秋天,约翰带着奶牛们去玩玉米迷宫。迷宫可分成NxM个格子,有些格子种了玉 米,种宥玉米的格子无法通行。 
迷宫的四条边界上都是种了玉米的格子,其屮只有一个格子 没种,那就是出口。 
在这个迷宫里,有一些神奇的传送点6每个传送点由一对点组成,一旦 走入传送点的某个结点, 
机器就会强制把你送到传送点的另一头去。所有的传送点都是双向 的,如果你定到了另一头,机器也会把你送回来。

奶牛在一个单位的时间内只能向相邻的四个方向移动一格,不过传送机传送是瞬间完成 的。 
现在W西在迷宫里迷路了,她只知道目前的位罝在哪里,请你帮助她用最短的时间走出 迷宫吧。

Input

第一行:两个用空格分开的整数:N和M,2 
第二行到N+1行:第i+1行有M个连续的字符,描述了迷宫第i行的信息。其中"#"代 表不能通行的玉米地, 
"."代表可以通行的草地,"@"代表贝西的起始位罝,"="代表迷宫出口, 
大写字母“A”到“Z”总是成对出现的,代表一对传送点

Output

第一行:一个整数,表示贝西走出迷宫的最短时间,保证逃离迷宮的路线一定存在

Sample Input


5 6
###=##
#.W.##
#.####
#.@W##
######

Sample Output

3

HINT

从起点向右走,通过w传送,再从另一端 走出迷宫

现在连sb广搜都会错……

要tp之后再判断不合法情况

#include<cstdio>
#include<cstring>
#define N 510
const int mx[4]={0,1,0,-1};
const int my[4]={1,0,-1,0};
struct go{int x1,x2,y1,y2;}going[30];
int n,m;
int x1,y1,x2,y2,t,w=1;
int mrk[N][N];
bool sent[N][N];
int gox[N][N],goy[N][N];
int qx[N*N];
int qy[N*N];
int dist[N][N];
inline void bfs()
{memset(dist,-1,sizeof(dist));qx[1]=x1;qy[1]=y1;mrk[x1][y1]=1;dist[x1][y1]=0;while (t<w){int nx=qx[++t];int ny=qy[t];if (nx==x2&ny==y2)return;for (int k=0;k<4;k++){int wx=nx+mx[k];int wy=ny+my[k];if (sent[wx][wy]){int savx=wx,savy=wy;wx=gox[savx][savy];wy=goy[savx][savy];}if (wx<1||wx>n||wy<1||wy>m||mrk[wx][wy])continue;mrk[wx][wy]=1;dist[wx][wy]=dist[nx][ny]+1;qx[++w]=wx;qy[w]=wy;}}
}
int main()
{scanf("%d%d",&n,&m);for (int i=1;i<=n;i++)for (int j=1;j<=m;j++){char ch=getchar();while (ch!='#'&&ch!='='&&ch!='.'&&ch!='@'&&(ch<'A'||ch>'Z'))ch=getchar();if (ch=='@'){x1=i;y1=j;}elseif (ch=='#')mrk[i][j]=1;elseif (ch=='='){x2=i;y2=j;}elseif (ch>='A'&&ch<='Z'){int rnk=ch-'A'+1;sent[i][j]=1;if (!going[rnk].x1){going[rnk].x1=i;going[rnk].y1=j;}else{going[rnk].x2=i;going[rnk].y2=j;}}}for(int i=1;i<=26;i++)if (going[i].x1){int X1=going[i].x1;int Y1=going[i].y1;int X2=going[i].x2;int Y2=going[i].y2;gox[X1][Y1]=X2;goy[X1][Y1]=Y2;gox[X2][Y2]=X1;goy[X2][Y2]=Y1;}bfs();printf("%d",dist[x2][y2]);
}

  

转载于:https://www.cnblogs.com/zhber/p/4035906.html

bzoj3299 [USACO2011 Open]Corn Maze玉米迷宫相关推荐

  1. 洛谷 P1825 [USACO11OPEN]玉米田迷宫Corn Maze

    题目描述 去年秋天,奶牛们去参观了一个玉米迷宫,迷宫里有一些传送装置,可以将奶牛从一点到另一点进行瞬间转移.这些装置可以双向使用:一头奶牛可以从这个装置的起点立即到此装置的终点,同时也可以从终点出发, ...

  2. 广度优先搜索——Corn Maze S(洛谷 P1825)

    题目选自洛谷P1825 题目比较长,但是不难理解.因为求的是一个最短距离,所以用BFS即可. 广搜的主要思想便是将所有可行解(可到达的点)放入队列,然后再一个个遍历所有可行解(可到达的点),知道找到终 ...

  3. 玉米迷宫,Meteor Shower S,单词接龙

    玉米迷宫:- [P1825 [USACO11OPEN]Corn Maze S](https://www.luogu.com.cn/problem/P1825) 这是让我卡了整整一天的题目,虽然说思路不 ...

  4. Word Maze单词迷宫C语言解法(详细注解)

    Word Maze单词迷宫C语言解法(详细注解) 题目描述 C语言代码 DFS算法 题目描述 Word Maze 是一个网络小游戏,你需要找到以字母标注的食物,但要求以给定单词字母的顺序吃掉.假设给定 ...

  5. 2015年华为实习生机试样题(记票统计,计算麻将的番数,Word Maze(单词迷宫))

    这是华为今年实习生招聘给的样题,还是特别喜欢考字符串处理问题. 记票统计 描述: 模拟n个人参加选举的过程,并输出选举结果:假设候选人有四人,分别用"A"."B" ...

  6. 华为软件类校招 2014年9月3日 熟悉机考环境 1.记票统计 2.求最大递增数 3.Word Maze(单词迷宫)

    (样题,已对外公布)记票统计 描述: 模拟n个人参加选举的过程,并输出选举结果:假设候选人有四人,分别用"A"."B"."C"." ...

  7. Corn Maze S

    题目: This past fall, Farmer John took the cows to visit a corn maze. But this wasn't just any corn ma ...

  8. word maze 单词迷宫 (java语言编写)

    Word Maze 是一个网络小游戏,你需要找到以字母标注的食物,但要求以给定单词字母的顺序吃掉.如上图,假设给定单词 if,你必须先吃掉i然后才能吃掉f.但现在你的任务可没有这么简单,你现在处于一个 ...

  9. 华为上机题之Word Maze(单词迷宫)

    Word Maze 是一个网络小游戏,你需要找到以字母标注的食物,但要求以给定单词字母的顺序吃掉.如上图,假设给定单词if,你必须先吃掉i然后才能吃掉f. 但现在你的任务可没有这么简单,你现在处于一个 ...

最新文章

  1. Python 属性__getattribute__
  2. html 可调节进度条控件,jQuery简单实用的轻量级进度条插件
  3. java 中的 Enumeration 在Vector,Hashtable和web中的应用
  4. sql server 数据库性能忧化
  5. Catch Overflow!
  6. MapReduce源码刨析
  7. CVE-2021-3560的漏洞说明及利用流程
  8. update语句修改报错问题处理
  9. 操作系统的位数决定寻址空间
  10. Python——组合数据类型(字符串、元组、列表、字典)转换总结
  11. 2016年个人总结报告PPT(刘欣)
  12. c语言方式表达教师节快乐,教师节丨纸短情长 难忘师恩 请您收下这封慰问信(内含表彰名单)...
  13. rospy基础--001_talker_listener
  14. 大学毕业学技术学什么好
  15. 笑话:在暗恋的女神家上厕所的悲剧
  16. golang 撤回_Activiti6.0版本流程撤回、跳转、回退等操作
  17. php网络通讯,Linux_网络通讯--efax,功能说明:收发传真。 语  - phpStudy
  18. Python爬取大众点评景点评论
  19. 使用Python编写一个渗透测试探测工具
  20. Leetcode算法——537、复数乘法

热门文章

  1. linux make编译卡死,为linux内核编译make文件时出现问题?
  2. vs找不到dll_零基础学习Python_绝对VS相对
  3. c语言用数组发送大写字母怎么读,c语言字符数组大小写转换
  4. 欧氏距离 vs 马氏距离
  5. Visual Tracking:运行ECO模型的GPU版本
  6. BZOJ 4278 [ONTAK2015]Tasowanie (后缀数组)
  7. luogu P4512 多项式除法 (模板题、FFT、多项式求逆)
  8. 苹果电脑怎么设置佳博标签打印机_热销斑马标签打印机恢复出厂设置的方法
  9. python工具包_python 工具包
  10. linux命令速查手册_干货| 有了这个速查手册,还怕Linux命令记不住?