讨论 / 注意!
永远的D 2011-02-02 00:20:00
点我顶贴 收藏 删除
如果字符串读入一定要用ansisting!顺道附上程序

Var x1,x2,y1,y2,x,y,n,i,j,head,tail:longint;

st:string;

a,v:array[1..1000,1..10000] of 0..1;

t:array [1..1000000,1..2] of 0..1000;

xx:array [1..4] of longint=(1,-1,0,0);

yy:array [1..4] of longint=(0,0,1,-1);

d:array [1..1000,1..1000] of longint;

Procedure input;

Begin

Fillchar(v,sizeof(v),0);

Fillchar(d,sizeof(d),0);

Readln(n);

For i:=1 To n Do

Begin

Readln(st);

For j:=1 To n Do

a[i,j]:=ord(st[j])-ord('0');

End;

Readln(x1,y1);

Readln(x2,y2);

t[1,1]:=x1; t[1,2]:=y1; v[x1,y1]:=1;

v[x2,y2]:=0;

End;

Procedure main;

Begin

head:=0; tail:=1;

While head<=tail Do

Begin

inc(head);

x:=t[head,1]; y:=t[head,2];

For i:=1 To 4 do

Begin

If (x+xx[i]>0) and (y+yy[i]>0) and (x+xx[i]<=n) and (y+yy[i]<=n) Then

If (v[x+xx[i],y+yy[i]]=0) and (a[x+xx[i],y+yy[i]]=0) Then Begin

inc(tail);

t[tail,1]:=x+xx[i];

t[tail,2]:=y+yy[i];

v[x+xx[i],y+yy[i]]:=1;

d[x+xx[i],y+yy[i]]:=d[x,y]+1;

End;

If v[x2,y2]=1 Then Begin

head:=maxlongint;

Break;

End;

End;

End;

End;

Begin

input;

main;

Writeln(d[x2,y2]);

End。

查看更多回复
提交回复