const dx:array[1..4]of integer=(1,0,-1,0);
dy:array[1..4]of integer=(0,1,0,-1);
type data=record
x,y:integer;
t:integer;
end;
var x,y,t:array[1..50000]of longint;
v:array[-1..301,-1..301,0..301]of boolean;
l:array[1..90000]of data;
vis:array[0..301,0..301]of boolean;
n,m,maxt,i,t1,j:longint;
procedure init;//计算陨石掉落时间
//v[x,y,t] x,y坐标,t时间
//其实不用t,没改
var i,j:longint;
begin
for i:=1 to n do
begin
for j:=t[i] to maxt+1 do
begin
v[x[i],y[i],j]:=true;
v[x[i]-1,y[i],j]:=true;
v[x[i],y[i]-1,j]:=true;
v[x[i],y[i]+1,j]:=true;
v[x[i]+1,y[i],j]:=true;
end;
end;
end;
procedure bfs; //从[0,0] bfs
var xx,yy,i,j:longint;
h,t:longint;
begin
h:=0;t:=1;
fillchar(l,sizeof(l),0);
fillchar(vis,sizeof(vis),0);
vis[0,0]:=true;
repeat
inc(h);
for i:=1 to 4 do
begin
xx:=l[h].x+dx[i];
yy:=l[h].y+dy[i];
if (xx>=0)and(xx<=300)and(yy>=0)and(yy<=300)and(not vis[xx,yy])and(not v[xx,yy,l[h].t+1]) then //vis[x,y] 到过没 ,v[xx,yy,l[h].t+1] 就是到xx,yy再一步会不会被砸到
begin
inc(t);
l[t].x:=xx;
l[t].y:=yy;
l[t].t:=l[h].t+1;
vis[xx,yy]:=true;
if not v[xx,yy,maxt+1] then begin writeln(l[t].t);halt end;//判解
end;
end;
until h>t;
end;
begin
readln(n);
for i:=1 to n do
begin
readln(x[i],y[i],t[i]);
if t[i]>maxt then maxt:=t[i];
end;
init;
bfs;
writeln(-1);
end.
我就不信了,我还非得找出哪错了不可。不然这10分我受之有愧
不好找啊,我是dfs,你是bfs,思路就不同
v:array[-1..301,-1..301,0..301]of boolean;
t[i]范围是<=1000的。