永发信息网

求一道题的标程!

答案:2  悬赏:50  手机版
解决时间 2021-05-23 17:53
  • 提问者网友:黑米和小志
  • 2021-05-23 08:37

[USACO2007 OCT] Silver Obstacle Course 障碍训练场[Test23T1 ]

Time Limit:1000MS Memory Limit:65536K
Total Submit:103 Accepted:62

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

最佳答案
  • 五星知识达人网友:罪歌
  • 2021-05-23 08:48

用广搜


const
dx:array[1..4]of -1..1=(0,1,0,-1);
dy:array[1..4]of -1..1=(1,0,-1,0);
var
t,w,x,y,z,i,j,ii,jj,mm,nn,n,a,b:longint;
s:ansistring;
xx:array[1..1000,1..1000]of char;
h:array[0..1000000,1..4]of longint;
procedure doing;
begin
t:=0; w:=0; h[0,2]:=ii; h[0,3]:=jj;
repeat
for i:=1 to 4 do
begin
x:=1;
y:=dx[i]*x+h[t,2]; z:=dy[i]*x+h[t,3];
while (y>0)and(y<=n)and(z>0)and(z<=n)and(xx[y,z]<>'x')and(i<>h[t,1]) do
begin
inc(w); xx[y,z]:='y';
h[w,1]:=i; h[w,2]:=y; h[w,3]:=z;
if t<>0 then h[w,4]:=h[t,4]+1;
if (h[w,2]=mm)and(h[w,3]=nn) then
begin
writeln(h[w,4]);
readln;
halt;
end;
inc(x);
y:=dx[i]*x+h[t,2]; z:=dy[i]*x+h[t,3];
end;
end;
if h[t+1,4]>h[t,4] then for i:=1 to w do if xx[h[i,2],h[i,3]]='y' then xx[h[i,2],h[i,3]]:='x';
inc(t);
until t>w;
end;
begin
readln(n);
for i:=1 to n do
begin
readln(s);
for j:=1 to n do
begin
xx[i,j]:=s[j];
if xx[i,j]='A' then
begin
ii:=i;
jj:=j;
end;
if xx[i,j]='B' then
begin
mm:=i;
nn:=j;
end;
end;
end;
doing;
end.

全部回答
  • 1楼网友:不甚了了
  • 2021-05-23 10:14
这个问题可以用栈实现 典型的迷宫问题
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯