讨论 / 请各位大牛指正
ahfy_zyt 2011-08-26 18:07:00
点我顶贴 收藏 删除
program lessturn;

var

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

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

a:array [0..100,0..100] of 0..1;

i,j,k,l:longint;

n,m:longint;

x1,x2,y1,y2,min:longint;

procedure search(x,y,w,c:longint);

var

i:longint;

begin

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

begin

if c<min then min:=c;

exit;

end;

if c>=min then exit;

for i:=1 to 4 do

if (a[x+v[i],y+u[i]]=0) then

begin

a[x+v[i],y+u[i]]:=1;

if w=i then search(x+v[i],y+u[i],w,c) else search(x+v[i],y+u[i],i,c+1);

end;

end;

begin

readln(n,m);

fillchar(a,sizeof(a),1);

for i:=1 to n do

for j:=1 to m do

read(a[i,j]);

min:=maxint;

readln(x1,y1,x2,y2);

search(x1,y1,0,0);

writeln(min);

readln;

end.

暴搜为什么会是WA0,却没有超时呢?

#1 ahfy_zyt@2011-08-26 18:07:00
回复 删除
问题已解除......

program lessturn;

var

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

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

a:array [0..100,0..100] of 0..1;

i,j,k,l:longint;

n,m:longint;

x1,x2,y1,y2,min:longint;

procedure search(x,y,w,c:longint);

var

i:longint;

begin

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

begin

if c<min then min:=c;

exit;

end;

if c>=min then exit;

for i:=1 to 4 do

if (a[x+v[i],y+u[i]]=0) then

begin

a[x+v[i],y+u[i]]:=1;

if w=i then search(x+v[i],y+u[i],w,c) else search(x+v[i],y+u[i],i,c+1);

a[x+v[i],y+u[i]]:=0;

end;

end;

begin

readln(n,m);

fillchar(a,sizeof(a),1);

for i:=1 to n do

for j:=1 to m do

read(a[i,j]);

min:=maxint;

readln(x1,y1,x2,y2);

search(x1,y1,0,0);

writeln(min);

readln;

end.

查看更多回复
提交回复