bzoj3299 [USACO2011 Open]Corn Maze玉米迷宫
来源:互联网 发布:淘宝达人个人和自媒体 编辑:程序博客网 时间:2024/03/28 21:54
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 510const 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]);}
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)
- bzoj3299
- 2442: [Usaco2011 Open]修剪草坪
- 【BZOJ2442】【Usaco2011 Open】修剪草坪
- BZOJ2442: [Usaco2011 Open]修剪草坪
- 2442: [Usaco2011 Open]修剪草坪
- 迷宫MAZE(数据结构)
- 迷宫问题—Maze
- 走出迷宫 Maze
- hero in maze 迷宫
- Word Maze(单词迷宫)
- 调用微信api时出现的问题
- FTP,HTTP各种端口号
- Count and Say
- 最明白的Unity3D手机平台分辨率自动匹配教程-适合新手
- UVALive3523-Knights of the Round Table(BCC+二分图判定)
- bzoj3299 [USACO2011 Open]Corn Maze玉米迷宫
- 安卓简单的JNI调用
- 通过js事件触发<a>标签点击事件
- 华为机试
- hadoop1.1.2环境搭建所需要修改的文件
- ;function($,undefined) 前面的分号是什么用处
- 二进制加法
- java.lang.AbstractMethodError: javax.servlet.jsp.JspFactory.getJspApplicationContext(Ljavax/servlet/
- 字符串匹配算法学习