永发信息网

求ZJU1091的标程

答案:2  悬赏:20  手机版
解决时间 2021-05-03 20:37
求!
最佳答案
const
dx:array[1..8] of -2..2=(-2,-1,1,2,2,1,-1,-2);
dy:array[1..8] of -2..2=(-1,-2,-2,-1,1,2,2,1);
var
s1,s2:string;
a,b,m,n,z,t,w:integer;
tt:array[1..8,1..8] of boolean;
h:array[1..200] of integer;
fe:array[1..2000,1..3] of integer;
procedure doing;
var
i,j,x,y:integer;
begin
t:=1;
w:=1;
fe[1,1]:=a;
fe[1,2]:=m;
fe[1,3]:=0;
tt[a,m]:=false;
while t<=w do
begin
for i:=1 to 8 do
begin
x:=fe[t,1]+dx[i];
y:=fe[t,2]+dy[i];
if (x>0) and (x<=8) and (y>0) and (y<=8) and (tt[x,y])
then begin
inc(w);
fe[w,1]:=x;
fe[w,2]:=y;
fe[w,3]:=fe[t,3]+1;
tt[x,y]:=false;
if (x=b) and (y=n) then exit;
end;
end;
inc(t);
end;
end;
begin
while not eof do
begin
fillchar(tt,sizeof(tt),true);
readln(s1);
a:=ord(s1[1])-96;
val(s1[2],m,z);
b:=ord(s1[4])-96;
val(s1[5],n,z);
s2:=copy(s1,4,2);
delete(s1,3,3);
if s1=s2 then writeln('To get from ',s1,' to ',s2,' takes 0 knight moves.')
else begin
doing;
writeln('To get from ',s1,' to ',s2,' takes ',fe[w,3],' knight moves.');
end;
end;
end.
全部回答

自己写的,比较丑,呵呵。

const dx:array[1..8] of -2..2=(-2,-1,1,2,2,1,-1,-2); dy:array[1..8] of -2..2=(-1,-2,-2,-1,1,2,2,1); type ff=record x,y,step:longint; end; var s:string; b:array[1..8,1..8] of boolean; h:array[1..64] of ff; startx,starty,goalx,goaly:longint;

procedure bfs; var i,tx,ty,head,tail:longint; begin head:=1; tail:=1; h[1].x:=startx; h[1].y:=starty; h[1].step:=0; fillchar(b,sizeof(b),true); b[startx,starty]:=false; repeat for i:=1 to 8 do begin tx:=h[head].x+dx[i]; ty:=h[head].y+dy[i]; if (tx>0) and (tx<=8) and (ty>0) and (ty<=8) and (b[tx,ty]) then begin b[tx,ty]:=false; inc(tail); h[tail].x:=tx; h[tail].y:=ty; h[tail].step:=h[head].step+1; if (tx=goalx) and (ty=goaly) then begin writeln('To get from ',s[1],s[2],' to ',s[4],s[5],' takes ',h[tail].step,' knight moves.'); exit; end; end; end; inc(head); until head>tail; end;

begin while not eof do begin readln(s); startx:=ord(s[1])-ord('a')+1; starty:=ord(s[2])-ord('0'); goalx:=ord(s[4])-ord('a')+1; goaly:=ord(s[5])-ord('0'); if (startx=goalx) and (starty=goaly) then writeln('To get from ',s[1],s[2],' to ',s[4],s[5],' takes 0 knight moves.') else bfs; end; end.

我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
这句话应该怎样说?
战地之王什么时候公测?点亮此图标须满足什么
男友这样还可以在一起吗?
农业银行下载证书不行啊?帮我看下。
QQ上面的天气图标还是没有
爱国爱校爱家幼儿诗歌,描写剪纸的诗句
鸽子的视力是不是是非常的好?
想找个女朋友,大理的最好,年龄在19到21,有
DNF客户端自动运行在进程里怎么回事?
梦见和女朋友分手了!是怎么回事啊? 求助!
灵康保健在哪里啊,我有事要去这个地方
笔记本经常死机为什么啊
福克斯和卡罗拉哪个好,福克斯和思域买哪个好
伤过了、累
一个体积为1立方米的正方体,如果将它分为体
推荐资讯
初中月学习生活总结
河南宽带我世界修复
如果出WLK网易``敢出月卡否`?
原味八分熟儿我想知道这个在什么地方
为什么我的QQ空间装饰模块不是透明的(在我自
新聚汇地址在什么地方,想过去办事
徐霞客经典名句,徐霞客游记里写徐霞客野外露
做不了情人,还可以做朋友吗?
我要关于猫的Q名~
玩永恒之塔电脑配置问题
教师评语一年级小学,一年级看图写话(老师怎样
购汇什么意思,外汇,结汇,购汇,付汇各什么
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?