1644: [Usaco2007 Oct]Obstacle Course 障碍训练课
1644: [Usaco2007 Oct]Obstacle Course 障碍训练课
Time Limit: 5 Sec Memory Limit: 64 MB
Submit: 383 Solved: 196
Description
考虑一个 N x N (1 <= N <= 100)的有1个个方格组成的正方形牧场。有些方格是奶牛们不能踏上的,它们被标记为了'x'。例如下图:
. . B x . . x x A . . . . x . . x . . . . . x . .
贝茜发现自己恰好在点A处,她想去B处的盐块舔盐。缓慢而且笨拙的动物,比如奶牛,十分讨厌转弯。尽管如此,当然在必要的时候她们还是会转弯的。对于一个给定的牧场,请你计算从A到B最少的转弯次数。开始的时候,贝茜可以使面对任意一个方向。贝茜知道她一定可以到达。
Input
第 1行: 一个整数 N 行
2..N + 1: 行 i+1 有 N 个字符 ('.', 'x', 'A', 'B'),表示每个点的状态。
Output
行 1: 一个整数,最少的转弯次数。
Sample Input
3 .xA ... Bx.
Sample Output
2
HINT
Source
题解:(HansBug:太开心啦,这道题我又逗比啦哈哈哈 wnjxyk:汗= =)
其实虽然这道题也是个BFS水题,但是和一般的走迷宫问题相比,这道题有个坑点——对于一个点先遍历到的未必是最优的,其实就算是当前最优也由于在本题中由于涉及方向问题,所以对后续来说也未必最优,而如果简单的灌水法的话,则会由于遍历过了而导致真正的最优值无法被更新
如,数据中的第5个点:
33 .......xA.....x.......x.......... ...x...........x.........x....... ........x.xx.....x.x............. .....x.....x.........x........... .....x................x.x........ ......x..x....x.........xx....... ...................x......x...... ...x.....x....................x.. ....x..........................x. x................................ ................................. .....x...x..x.................... .............................x... ...................x.........x... ...............x...x....x...x.... ..........xx.......x..x.......... ................................x ..............................xx. ..x...............x.x............ .x....x...............x....x....x ..x......xx.......x.x.......x.... ................x...xx.....x.x..x .x.............x........x...x.x.. .............................x.x. .........................x......x .....x.......x............xx...xx ........x....x.....xx.x.....xx.x. ...........x...x........x.x...xxB .x.x.x.............x...........x. x.............x................x. .........x.x.....x.....x.....x... ........x..............xx.....x.. ..............xx......x.x.....x..
(2,10)位置上最优值显然是1,而且无论怎么遍历都是1
但是(3,10)由于涉及来源于(2,10)的方向问题,所以很可能弄出个2作最优解,但事实上正解是1
说了这些就没了,继续AC
1 /**************************************************************
2 Problem: 1644
3 User: HansBug
4 Language: Pascal
5 Result: Accepted
6 Time:32 ms
7 Memory:1728 kb
8 ****************************************************************/
9
10 const dd:array[1..4,1..2] of longint=((1,0),(-1,0),(0,1),(0,-1));
11 var
12 i,j,k,l,m,n,x0,y0,x1,y1,f,r,x,y:longint;
13 b:array[0..205,0..205] of longint;
14 a:array[0..205,0..205] of longint;
15 d:array[0..100000,0..2] of longint;
16 ch:char;
17 function min(x,y:longint):longint;
18 begin
19 if x<y then min:=x else min:=y;
20 end;
21 function max(x,y:longint):longint;
22 begin
23 if x>y then max:=x else max:=y;
24 end;
25
26 begin
27 readln(n);
28 fillchar(b,sizeof(b),0);
29 fillchar(a,sizeof(a),0);
30 for i:=0 to n+1 do
31 begin
32 b[0,i]:=1;
33 b[n+1,i]:=1;
34 b[i,0]:=1;
35 b[i,n+1]:=1;
36 end;
37 for i:=1 to n do
38 begin
39 for j:=1 to n do
40 begin
41 read(ch);
42 case upcase(ch) of
43 '.':b[i,j]:=0;
44 'A':begin
45 x0:=i;y0:=j;
46 b[i,j]:=1;
47 end;
48 'B':begin
49 x1:=i;y1:=j;
50 b[i,j]:=0;
51 end;
52 'X':b[i,j]:=1;
53 end;
54 end;
55 readln;
56 end;
57 f:=1;r:=2;d[1,1]:=x0;d[1,2]:=y0;
58 a[x0,y0]:=1;a[x0,y0]:=1;a[x0,y0]:=1;a[x0,y0]:=1;
59 while f<r do
60 begin
61 for i:=1 to 4 do
62 begin
63 x:=d[f,1];y:=d[f,2];
64 while true do
65 begin
66 x:=x+dd[i,1];
67 y:=y+dd[i,2];
68 if b[x,y]=1 then break;
69 l:=a[d[f,1],d[f,2]]+1;
70 if (l>=a[x,y]) and (a[x,y]>0) then continue;
71 a[x,y]:=l;
72 if (x=x1) and (y=y1) then
73 begin
74 writeln(a[x,y]-2);
75 readln;
76 halt;
77 end;
78 d[r,1]:=x;d[r,2]:=y;
79 inc(r);
80 end;
81
82 end;
83 inc(f);
84 end;
85 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 数组属性和方法
- PHP获取中文拼音首字符方法
- PHP_MySQL笔试题目一
- nginx+nginx-upsync-module实现动态负载及自定义验证
- np.diff函数
- PHP对Json字符串解码返回NULL的一般解决方案
- 记一次 Istio 云数据库连接失败的错误排查过程
- PHP对抗web扫描器的脚本技巧
- MTO Jmetal IGD计算BUG
- 《算法》读书笔记:1.1 基础编程模型
- 《剑指 offer》刷题记录之:查找和排序
- numpy 计算路线距离
- 自然语言处理中的预训练模型(下)
- MySQL性能优化的最佳20+条经验
- 《剑指 offer》刷题记录之:回溯法
- 《剑指 offer》刷题记录之:动态规划与贪婪算法