讨论 / 求找措
神人徐 2014-05-12 05:12:44
点我顶贴 收藏 删除
const

maxn=2010;maxv=4000010;

flag:array[0..3,0..1]of longint=((-1,0),(0,1),(1,0),(0,-1));

var

map:array[0..maxn,0..maxn]of char;

m,n,x1,x2,y1,y2,tail,head:longint;

que:array[0..maxv]of record

x,y,s:longint;

end;

procedure init;

var

i,j:longint;

begin

//assign(input,'maze.in');reset(input);

//assign(output,'maze.out');rewrite(output);

readln(n,m);

for i:=1 to n do

begin

for j:=1 to m do

read(map[i,j]);

readln;

end;

readln(x1,y1);

read(x2,y2);

end;

procedure print;

begin

writeln(que[tail].s);

//close(input);close(output);

end;

procedure print2;

begin

writeln('No Answer!');

//close(input);close(output);

end;

function check(x,y:longint):boolean;

begin

if (x<1)or(x>n)or(y<1)or(y>m) then exit(false);

if map[x,y]='0' then exit(true);

exit(false);

end;

procedure find(x,y:longint);

begin

inc(tail);

que[tail].x:=x;que[tail].y:=y; que[tail].s:=que[head].s+1;

if (x=x2)and(y=y2) then begin

print;

halt;

end;

map[x,y]:='1';

end;

procedure main;

var

xx,yy,i:longint;

begin

fillchar(que,sizeof(que),0);

head:=0;tail:=1;

que[1].x:=x1;que[1].y:=y1;map[x1,y1]:='1';

while head<>tail do

begin

inc(head);

xx:=que[head].x;yy:=que[head].y;

for i:=0 to 3 do

if check(xx+flag[i,0],yy+flag[i,1]) then find(xx+flag[i,0],yy+flag[i,1]);

end;

end;

begin

init;

main;

print2;

end.

#1 神人徐@2014-05-13 04:36:54
回复 删除
牛来看一下
#2 sherlock Holmes@2014-05-16 06:22:43
回复 删除
貌似没错啊
查看更多回复
提交回复