30分求助
查看原帖
30分求助
63287
Sky_Brilliant楼主2020/11/4 19:14
const dx:array[1..12] of longint=(1,1,2,2,-1,-1,-2,-2,2,2,-2,-2);
      dy:array[1..12] of longint=(2,-2,1,-1,2,-2,1,-1,2,-2,2,-2);
var x,y:longint;
procedure bfs(x,y:longint);
var n,m,head,tail,i,j,k,t:longint;
    h:array[-5..200005,1..3] of longint;
    bz:array[-5..405,-5..405] of boolean;
    a:array[-5..405,-5..405] of longint;
    s:string;
begin
    n:=x;m:=y;
    fillchar(bz,sizeof(bz),true);
    head:=1;tail:=1;h[1,1]:=x;h[1,2]:=y;h[1,3]:=0;bz[x,y]:=false;
    while head<=tail do
    begin
        for i:=1 to 12 do
        begin
            x:=h[head,1]+dx[i];y:=h[head,2]+dy[i];
            if (x<1) or (y<1) or (x>n) or (y>m) then continue;
            if not bz[x,y] then continue;
            inc(tail);
            h[tail,1]:=x;h[tail,2]:=y;h[tail,3]:=h[head,3]+1;bz[x,y]:=false;
            if (x=1) and (y=1) then
            begin
                writeln(h[head,3]+1);
                exit;
            end;
        end;
        inc(head);
    end;
end;
begin
    readln(x,y);
    bfs(x,y);
    readln(x,y);
    bfs(x,y);
end.
2020/11/4 19:14
加载中...