33 lines
979 B
ObjectPascal
33 lines
979 B
ObjectPascal
var
|
||
a,b,t,h,n,i:integer;
|
||
q,d,k:array[1..1000]of integer; //q为队列,k为楼层数字,d为乘电梯次数
|
||
s:set of 1..200; //到过楼层放入集合
|
||
begin
|
||
assign(input,'lift.in');reset(input);
|
||
assign(output,'lift.out');rewrite(output);
|
||
read(n,a,b);
|
||
for i:=1 to n do
|
||
read(k[i]);
|
||
h:=0; //队头指针
|
||
t:=1; //队尾指针
|
||
q[1]:=a;
|
||
repeat
|
||
inc(h);
|
||
for i:=-1 to 1 do //上楼或下楼
|
||
if (q[h]+k[q[h]]*i>0) and not (q[h]+k[q[h]]*i in s) then
|
||
begin //满足楼层要求且没到过
|
||
inc(t);
|
||
s:=s+[q[h]+k[q[h]]*i]; //放入集合
|
||
q[t]:=q[h]+k[q[h]]*i; //入队
|
||
d[t]:=d[h]+1; //记录乘电梯次数
|
||
end;
|
||
until (h=t) or (q[t]=b);
|
||
if a=b then
|
||
writeln(0)
|
||
else
|
||
if q[t]=b then //到达指定楼层
|
||
writeln(d[t])
|
||
else
|
||
writeln('-1'); //无法到达
|
||
close(input);close(output);
|
||
end. |