讨论 / 大牛们来看看
1134737006 2009-09-05 05:50:00
点我顶贴 收藏 删除
出了什么问题program ppp;

var a,w:array[-1000..1000,-1000..1000] of longint;

p,q:array[-10000..1000000] of longint;

i,j,k,m,n,o,t,m1,m2,n1,n2,tb,wb:longint;kk:boolean;

st:array[0..1005,0..1005] of string;st1,st2:ansistring;ch:char;

begin

readln(n);

for i:=1 to n do begin k:=0;

repeat

inc(k);

read(ch);

st[i,k]:=ch+st[i,k];

val(st[i,k],a[i,k]);

w[i,k]:=1;

until k=n;

readln;end;

readln(m1,n1);

readln(m2,n2);

kk:=false;p[1]:=m1;q[1]:=n1;k:=0;tb:=1;wb:=1;w[m1,n1]:=2;

if (m1=m2) and (n1=n2) then write(0)

else begin

repeat

inc(k);t:=0;

for i:=tb to wb do

begin

if (a[p[i],q[i]-1]=0) and (w[p[i],q[i]-1]<>2) and (q[i]-1>0) then

begin

inc(t);p[wb+t]:=p[i];q[wb+t]:=q[i]-1;w[p[wb+t],q[wb+t]]:=2;if (p[wb+t]=m2)

and (q[wb+t]=n2) then kk:=true;end;

if (a[p[i],q[i]+1]=0) and (w[p[i],q[i]+1]<>2) and (q[i]+1<=n) then

begin

inc(t);p[wb+t]:=p[i];q[wb+t]:=q[i]+1;w[p[wb+t],q[wb+t]]:=2;if (p[wb+t]=m2)

and (q[wb+t]=n2) then kk:=true;end;

if (a[p[i]-1,q[i]]=0) and (w[p[i]-1,q[i]]<>2) and (p[i]-1>0) then

begin

inc(t);p[wb+t]:=p[i]-1;q[wb+t]:=q[i];w[p[wb+t],q[wb+t]]:=2;if (p[wb+t]=m2)

and (q[wb+t]=n2) then kk:=true;end;

if (a[p[i]+1,q[i]]=0) and (w[p[i]+1,q[i]]<>2) and (p[i]+1<=n) then

begin

inc(t);p[wb+t]:=p[i]+1;q[wb+t]:=q[i];w[p[wb+t],q[wb+t]]:=2;if (p[wb+t]=m2)

and (q[wb+t]=n2) then kk:=true;end;

tb:=wb+1;wb:=wb+t;end;

until kk=true;write(k);end;

end.

#1 zsx@2009-09-05 05:48:00
回复 删除
不能用 ELSE

#2 zsx@2009-09-05 05:50:00
回复 删除
判断语句要放在前面;而且一个点的四周都要遍历,因此不能用ELSE。

积分给我吧

查看更多回复
提交回复