[USACO2011 Open]Corn Maze玉米迷宫
来源:互联网 发布:淘宝网客服打不开 编辑:程序博客网 时间:2024/04/28 00:34
Description
今年秋天,约翰带着奶牛们去玩玉米迷宫。迷宫可分成NxM个格子,有些格子种了玉 米,种宥玉米的格子无法通行。迷宫的四条边界上都是种了玉米的格子,其屮只有一个格子 没种,那就是出口。
在这个迷宫里,有一些神奇的传送点6每个传送点由一对点组成,一旦 走入传送点的某个结点,
机器就会强制把你送到传送点的另一头去。所有的传送点都是双向 的,如果你定到了另一头,机器也会把你送回来。奶牛在一个单位的时间内只能向相邻的四个方向移动一格,不过传送机传送是瞬间完成 的。
现在W西在迷宫里迷路了,她只知道目前的位罝在哪里,请你帮助她用最短的时间走出 迷宫吧。
在这个迷宫里,有一些神奇的传送点6每个传送点由一对点组成,一旦 走入传送点的某个结点,
机器就会强制把你送到传送点的另一头去。所有的传送点都是双向 的,如果你定到了另一头,机器也会把你送回来。奶牛在一个单位的时间内只能向相邻的四个方向移动一格,不过传送机传送是瞬间完成 的。
现在W西在迷宫里迷路了,她只知道目前的位罝在哪里,请你帮助她用最短的时间走出 迷宫吧。
Input
第一行:两个用空格分开的整数:N和M,2
第二行到N+1行:第i+1行有M个连续的字符,描述了迷宫第i行的信息。其中"#"代 表不能通行的玉米地,
"."代表可以通行的草地,"@"代表贝西的起始位罝,"="代表迷宫出口,
大写字母“A”到“Z”总是成对出现的,代表一对传送点
第二行到N+1行:第i+1行有M个连续的字符,描述了迷宫第i行的信息。其中"#"代 表不能通行的玉米地,
"."代表可以通行的草地,"@"代表贝西的起始位罝,"="代表迷宫出口,
大写字母“A”到“Z”总是成对出现的,代表一对传送点
Output
第一行:一个整数,表示贝西走出迷宫的最短时间,保证逃离迷宮的路线一定存在
Sample Input
5 6###=###.W.###.#####.@W########
Sample Output
3
HINT
从起点向右走,通过w传送,再从另一端 走出迷宫
裸BFS。oj编译器选错卡拉半小时。。。
#include<iostream>#include<cstdio>#include<cstring>#include<cstdlib>#include<set>#include<ctime>#include<vector>#include<cmath>#include<algorithm>#include<map>#define inf 1000000000#define ll long longusing namespace std;const double pi=acos(-1.0);inline int read(){ int x=0,f=1;char ch=getchar(); while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();} while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();} return x*f;}int xx[4]={0,0,1,-1},yy[4]={1,-1,0,0};int n,m,bx,by,ex,ey;int a[26][4];char mp[1005][1005];bool vis[1005][1005];struct data{int x,y,step;}q[1000005];void next(int &x,int &y,char ch){ int t=ch-'A'; if(a[t][0]==x&&a[t][1]==y) x=a[t][2],y=a[t][3]; else x=a[t][0],y=a[t][1];}void bfs(){ int head=0,tail=1; q[head].x=bx;q[head].y=by;vis[bx][by]=1; while(head!=tail) { int x=q[head].x,y=q[head].y,step=q[head].step;head++; for(int i=0;i<4;i++) { int nowx=x+xx[i],nowy=y+yy[i]; if(mp[nowx][nowy]=='#'||vis[nowx][nowy]||nowx<1||nowy<1||nowx>n||nowy>m) continue; vis[nowx][nowy]=1; if(mp[nowx][nowy]>='A'&&mp[nowx][nowy]<='Z') next(nowx,nowy,mp[nowx][nowy]); if(nowx==ex&&nowy==ey){printf("%d\n",step+1);return;} q[tail].x=nowx;q[tail].y=nowy;q[tail].step=step+1;tail++; } }}int main(){ n=read();m=read(); for(int i=1;i<=n;i++) { scanf("%s",mp[i]+1); for(int j=1;j<=m;j++) { char t=mp[i][j]; if(t>='A'&&t<='Z') { if(!a[t-'A'][0]) a[t-'A'][0]=i,a[t-'A'][1]=j; else a[t-'A'][2]=i,a[t-'A'][3]=j; } else if(t=='@')bx=i,by=j; else if(t=='=')ex=i,ey=j; } } bfs(); return 0;}
0 0
- bzoj3299 [USACO2011 Open]Corn Maze玉米迷宫
- [BZOJ3299][USACO2011 Open]Corn Maze玉米迷宫
- [USACO2011 Open]Corn Maze玉米迷宫
- bzoj 3299: [USACO2011 Open]Corn Maze玉米迷宫 最短路
- USACO 玉米田迷宫 Corn Maze
- 洛谷 P1825 [USACO11OPEN]玉米田迷宫Corn Maze
- Luogu P1825 玉米田迷宫Corn Maze
- USACO 2011 Open Silver 1.Corn Maze (bfs)
- 2442: [Usaco2011 Open]修剪草坪
- 【BZOJ2442】【Usaco2011 Open】修剪草坪
- BZOJ2442: [Usaco2011 Open]修剪草坪
- 2442: [Usaco2011 Open]修剪草坪
- 迷宫MAZE(数据结构)
- 迷宫问题—Maze
- 走出迷宫 Maze
- hero in maze 迷宫
- Word Maze(单词迷宫)
- Word Maze 单词迷宫
- 无限轮播图填坑--ViewPager 调用setCurrentItem(int position) 卡死
- usaco三值的排序 Sorting a Three-Valued Sequence
- 第十六周项目4—英文单词的基数排序
- 数据库还原--根据MDF文件和LDF文件
- poj3061 Subsequence 尺取法
- [USACO2011 Open]Corn Maze玉米迷宫
- eclipse安装JAVA反编译插件
- 给定一个整型变量a,写两段代码,第一个设置a的bit 3,第二个清除a 的bit 3。在以上两个操作中,要保持其它位不变。
- Android开发从入门到放弃(2)保存Activity的状态
- [Unity]UWA NGUI 直播笔记
- 链表练习
- MySQL存储引擎
- 关于端口 协议 OSI七层模型 稍微多一点理解
- Unity3D 光照系统(一)