记录编号 187078 评测结果 AAAAAAAAAA
题目名称 [HDU 1548] 奇怪的电梯 最终得分 100
用户昵称 Gravatar翟佳麒 是否通过 通过
代码语言 Pascal 运行时间 0.000 s
提交时间 2015-09-17 13:32:38 内存使用 0.00 MiB
显示代码纯文本
//广搜
const max=200;
      d:array[1..2] of integer=(-1,1);
var
  q,pre,k:array[1..max] of integer;
  value:array[1..max] of boolean;
  n,a,b,i,ans:integer;
procedure bfs;
var head,tail,t,j:integer;
begin
  head:=0; tail:=1;
  q[1]:=a; pre[1]:=0; value[a]:=false;
   repeat
     inc(head);
     for i:=1 to 2 do
     begin
       t:=q[head]+d[i]*k[q[head]];
       if (t>=1) and (t<=n) and value[t] then
       begin
         inc(tail);
         q[tail]:=t;
         pre[tail]:=head;
         value[t]:=false;
         if t=b then
           begin
             ans:=0;
             j:=tail;
             while pre[j]<>0 do begin inc(ans); j:=pre[j]; end;
           end;
       end;
     end;
   until head>=tail;
end;
begin
assign(input,'lift.in');
reset(input);
assign(output,'lift.out');
rewrite(output);
  readln(n,a,b);
  for i:=1 to n do read(k[i]);
  fillchar(value,sizeof(value),true);
  ans:=maxint;
  if a=b then ans:=0 else bfs;
  if ans=maxint then ans:=-1;
  writeln(ans);
end.

//深搜
const max=200;
var
  k:array[1..max] of integer;
  value:array[1..max] of boolean;
  n,a,b,i,ans:integer;
procedure dfs(s,step:integer);
  begin
  if s=b then begin  if step<ans then ans:=step;exit;end;
  if (step<ans)and(s>=1)and(s<=n) and value[s] then begin
    value[s]:=false;
    dfs(s+k[s],step+1);
    dfs(s-k[s],step+1);
    value[s]:=true;
  end;
end;
begin
  readln(n,a,b);
  for i:=1 to n do read(k[i]);
  fillchar(value,sizeof(value),true);
  ans:=maxint;
  dfs(a,0);
  if ans=maxint then ans:=-1;
  writeln(ans);
end.}