讨论 / 广搜题 流星雨 谁能帮我看看 第五个点错了, 我注意了有301的边界问题 可还是错
ing 2010-09-15 06:44:00
点我顶贴 收藏 删除
求大牛给予帮助, 小弟谢过了

program ing;

const dx:array[1..4] of -1..1 =(1,0,-1,0);

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

type node=record

x,y:integer;

k:longint;

end;

var b:array[1..200000] of node;

a:array[0..310,0..310] of integer;

i,t,x,y,m:integer;

w:boolean;

procedure doit;

var f,t:longint;

i,j,k,x,y,x1,y1:integer;

q:boolean;

begin

f:=0; t:=1;

b[1].x:=0; b[1].y:=0; b[1].k:=0;

repeat

f:=f+1;

for i:=1 to 4 do begin

x:=b[f].x+dx[i];

y:=b[f].y+dy[i];

if (x>=0) and (y>=0) and (y<=301) and (x<=301) and (a[x,y]<>-1) then begin

if (a[x,y]-b[f].k>=3) or (a[x,y]=0) then begin

k:=0; q:=false;

for j:=1 to 4 do begin

x1:=x+dx[j];

y1:=y+dy[j];

if (x1>=0) and (y1>=0) and (x1<=301) and (y1<=301) then

if ((a[x1,y1]=-1) or (a[x1,y1]=0) or

(a[x1,y1]>b[f].k+1)) then k:=k+1;

if (x1=-1) or (y1=-1) or (x1=302) or (y1=302) then k:=k+1;

end;

if k=4 then begin

t:=t+1;

b[t].x:=x; b[t].y:=y; b[t].k:=b[f].k+1;

if a[x,y]=0 then a[x,y]:=-1;

q:=true;

end;

k:=0;

if q and (a[x,y]=-1) then for j:=1 to 4 do begin

x1:=b[t].x+dx[j];

y1:=b[t].y+dy[j];

if (x1>=0) and (y1>=0) and (x1<=301) and (y1<=301) then

if (a[x1,y1]=0) or (a[x1,y1]=-1) then k:=k+1;

if (x1=-1) or (y1=-1) or (x1=302) or (y1=302) then k:=k+1;

end;

if k=4 then begin writeln(b[t].k); w:=false; exit; end;

end;

end;

end;

until f=t;

end;

begin

readln(m);

for i:=1 to m do begin

readln(x,y,t);

a[x,y]:=t;

end;

w:=true;

if (a[0,0]<>1) or (a[0,0]=0) then doit;

if w then writeln(-1);

end.

查看更多回复
提交回复