3299: [USACO2011 Open]Corn Maze玉米迷宫
时间:2022-05-08
本文章向大家介绍3299: [USACO2011 Open]Corn Maze玉米迷宫,主要内容包括3299: [USACO2011 Open]Corn Maze玉米迷宫、Description、Input、Output、Sample Input、Sample Output、HINT、Source、基本概念、基础应用、原理机制和需要注意的事项等,并结合实例形式分析了其使用技巧,希望通过本文能帮助到大家理解应用这部分内容。
3299: [USACO2011 Open]Corn Maze玉米迷宫
Time Limit: 10 Sec Memory Limit: 128 MB
Submit: 137 Solved: 59
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传送,再从另一端 走出迷宫
Source
题解:做过无数道BFS迷宫类水题了,但是这个比较神奇一点。。。其实就是多个传动点之间的瞬间传送,别的没了。。
1 const dd:array[1..4,1..2] of longint=((1,0),(-1,0),(0,-1),(0,1));
2 var
3 i,j,k,l,m,n,x0,y0,x1,y1,x,y,f,r:longint;
4 a,b:array[0..1000,0..1000] of longint;
5 tr:array[2..27,1..4] of longint;
6 d:array[0..1000000,1..2] of longint;
7 ch:char;
8 procedure trans(z:longint;var x,y:longint);
9 begin
10 if (z<2) or (z>27) then exit;
11 if (tr[z,1]=x) and (tr[z,2]=y) then
12 begin
13 x:=tr[z,3];y:=tr[z,4];
14 end
15 else if (tr[z,3]=x) and (tr[z,4]=y) then
16 begin
17 x:=tr[z,1];y:=tr[z,2];
18 end;
19 end;
20 begin
21 readln(n,m);
22 fillchar(a,sizeof(a),-1);
23 fillchar(tr,sizeof(tr),0);
24 for i:=1 to n do
25 begin
26 for j:=1 to m do
27 begin
28 read(ch);
29 case upcase(ch) of
30 '#':a[i,j]:=1;
31 '.':a[i,j]:=0;
32 '=':begin
33 x1:=i;y1:=j;
34 a[i,j]:=0;
35 end;
36 '@':begin
37 x0:=i;y0:=j;
38 a[i,j]:=1;
39 end;
40 'A'..'Z':begin
41 a[i,j]:=ord(ch)-63;
42 if tr[a[i,j],1]=0 then
43 begin
44 tr[a[i,j],1]:=i;
45 tr[a[i,j],2]:=j;
46 end
47 else
48 begin
49 tr[a[i,j],3]:=i;
50 tr[a[i,j],4]:=j;
51 end;
52 end;
53 end;
54 end;
55 readln;
56 end;
57 f:=1;r:=2;d[1,1]:=x0;d[1,2]:=y0;b[x0,y0]:=1;
58 while f<r do
59 begin
60 for i:=1 to 4 do
61 begin
62 x:=d[f,1]+dd[i,1];
63 y:=d[f,2]+dd[i,2];
64 if (x<1) or (x>n) or (y<1) or (y>m) then continue;
65 if abs(a[x,y])=1 then continue;
66 trans(a[x,y],x,y);
67 if b[x,y]=0 then
68 begin
69 b[x,y]:=b[d[f,1],d[f,2]]+1;
70 d[r,1]:=x;d[r,2]:=y;
71 if (x=x1) and (y=y1) then
72 begin
73 writeln(b[x,y]-1);
74 halt;
75 end;
76 inc(r);
77 end;
78 end;
79 inc(f);
80 end;
81 end.
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 使用IDEA整合spring4+spring mvc+hibernate
- springmvc中@PathVariable和@RequestParam的区别
- centos7 安装mysql5.6
- bashdb安装及调试shell脚本
- linux awk指令详解
- linux sed指令详解
- Grafana使用zabbix自定义模板
- linux shell之变量的使用规则
- 第11期:压缩表
- grafana-zabbix插件安装和配置zabbix mysql
- grafana使用教程之API key
- Grafana使用教程之安装
- Java基础数据类型之包装类equals和==详解
- SCP不用密码传输文件
- Java 使用Collections.reverse对list集合进行降序排序