bzoj3299 [USACO2011 Open]Corn Maze玉米迷宫
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
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;}else
if (ch=='#')mrk[i][j]=1;else
if (ch=='='){x2=i;y2=j;}else
if (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]);
}
bzoj3299 [USACO2011 Open]Corn Maze玉米迷宫的更多相关文章
- 3299: [USACO2011 Open]Corn Maze玉米迷宫
3299: [USACO2011 Open]Corn Maze玉米迷宫 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 137 Solved: 59[ ...
- 【BZOJ】3299: [USACO2011 Open]Corn Maze玉米迷宫(bfs)
http://www.lydsy.com/JudgeOnline/problem.php?id=3299 映射一下传送门即可.. #include <cstdio> #include &l ...
- 【bzoj 3299】 [USACO2011 Open]Corn Maze玉米迷宫(最短路)
就一个最短路,并且边长都是1,所以每个点只搜一次. /************************************************************** Problem: 3 ...
- BZOJ 3299: [USACO2011 Open]Corn Maze玉米迷宫(BFS)
水题一道却交了4次QAQ,真是蒟蒻QAQ CODE: #include<cstdio>#include<iostream>#include<cstring>#inc ...
- P1825 [USACO11OPEN]玉米田迷宫Corn Maze
题目描述 This past fall, Farmer John took the cows to visit a corn maze. But this wasn't just any corn m ...
- 洛谷——P1825 [USACO11OPEN]玉米田迷宫Corn Maze
P1825 [USACO11OPEN]玉米田迷宫Corn Maze 题目描述 This past fall, Farmer John took the cows to visit a corn maz ...
- 洛谷—— P1825 [USACO11OPEN]玉米田迷宫Corn Maze
https://www.luogu.org/problem/show?pid=1825 题目描述 This past fall, Farmer John took the cows to visit ...
- 洛谷 P1825 [USACO11OPEN]玉米田迷宫Corn Maze
P1825 [USACO11OPEN]玉米田迷宫Corn Maze 题目描述 This past fall, Farmer John took the cows to visit a corn maz ...
- [USACO11OPEN]玉米田迷宫Corn Maze
题目描述 This past fall, Farmer John took the cows to visit a corn maze. But this wasn't just any corn m ...
随机推荐
- 你真的会玩SQL吗?透视转换
原文:你真的会玩SQL吗?透视转换 透视转换是一种行列互转的技术,在转过程中可能执行聚合操作,应用非常广泛. 本章与 你真的会玩SQL吗?数据聚合 内容比较重要,还涉及到 你真的会玩SQL吗?Case ...
- 【温故而知新-万花筒】C# 异步编程 逆变 协变 委托 事件 事件参数 迭代 线程、多线程、线程池、后台线程
额基本脱离了2.0 3.5的时代了.在.net 4.0+ 时代.一切都是辣么简单! 参考文档: http://www.cnblogs.com/linzheng/archive/2012/04/11/2 ...
- FNN模糊神经网络——信息系统客户服务感知评价
案例描述 信息系统是否真正减轻业务人员的日常工作量提高工作效率?如何从提供“被动”服务转变为根据客户感知提供“主动”服务,真正实现电网企业对信息系统服务的有效管理?如何构建一套适合企业的信息系统客户服 ...
- javax.Swing 使用GridBagLayout的程序栗子
摘自https://zhidao.baidu.com/question/110748776.html javax.Swing 使用GridBagLayout的程序栗子 总共两个文件,第一个是启动文件, ...
- 一款超出你想象的代码审阅软件understand
看源码人们一般会想到source insight这款软件可是这款软件目前只支持windows平台,那如果我想在Linux平台上审阅代码呢, 没关系还有一款强大的软件understand,这款软件能够生 ...
- 一个web初学者的笔记总结
p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 18.0px "PingFang SC" } p.p2 { margin: 0.0px ...
- html image -- data:image/png;base64
1, data:image/png;base64 <!DOCTYPE HTML> <html> <head> <meta http-equiv=" ...
- react-native 布局基础
宽度单位和像素密度 react的宽度不支持百分比,设置宽度时不需要带单位 {width: 10}, 那么10代表的具体宽度是多少呢? 不知道是官网文档不全还是我眼瞎,反正是没找到,那做一个实验自己找吧 ...
- 几种基于javaI/O的文件拷贝操作比较
最近公司的项目用到文件拷贝,由于涉及到的大量大文件的拷贝工作,代码性能问题显得尤为重要,所以写了以下例子对几种文件拷贝操作做一比较: 0.文件拷贝测试方法 public static void fil ...
- 使用一个HttpModule拦截Http请求,来检测页面刷新(F5或正常的请求)
在Web Application中,有个问题就是:“我怎么来判断一个http请求到底是通过按F5刷新的请求还是正常的提交请求?” 相信了解ASP.NET的人知道我在说什么,会有同感,而且这其实不是一个 ...