tyvj p1117 拯救ice-cream
P1117 - 拯救ice-creamFrom smartc Normal (OI) 总时限:5s 内存限制:128MB |
|||||||
|---|---|---|---|---|---|---|---|
|
|||||||
Delphi语言: 高亮代码由发芽网提供
program tyvj1117;
type node=record
a,b,time:longint;
end;
var a:array[0..26,0..26] of integer;
q:array[1..625] of node;
d:array[1..4] of integer=(1,0,-1,0);
l:array[1..4] of integer=(0,-1,0,1);
mark:array[0..26,0..26] of boolean;
head,tail,t,x,y,i,j:longint;
k,first,final:node;
st:string;
procedure push(a,b,t:longint);
begin
inc(head);
q[head].a:=a;
q[head].b:=b;
q[head].time:=t;
mark[a,b]:=true;
end;
function pop:node;
begin
pop:=q[tail];
inc(tail);
end;
begin
fillchar(a,sizeof(a),3);
fillchar(mark,sizeof(mark),false);
readln(t);
readln(x,y);
for i:=1 to y do begin
readln(st);
for j:=1 to x do begin
case(st[j]) of
'.':a[i,j]:=1;
'0':a[i,j]:=3;
'#':a[i,j]:=2;
'm':begin
first.a:=i;first.b:=j;
a[i,j]:=1;
end;
's':begin
final.a:=i;final.b:=j;
a[i,j]:=1;
end;
end;
end;
end;
head:=0;tail:=1;
push(first.a,first.b,0);
while head>=tail do begin
k:=pop;
if (k.a=final.a) and(k.b=final.b) then begin
if k.time<t then writeln(k.time)
else writeln(55555);
halt;
end;
if a[k.a,k.b]=2 then begin
a[k.a,k.b]:=1;
push(k.a,k.b,k.time);
end
else begin
for i:=1 to 4 do
if(a[k.a+d[i],k.b+l[i]]<=2) and(not mark[k.a+d[i],k.b+l[i]]) then
push(k.a+d[i],k.b+l[i],k.time+a[k.a+d[i],k.b+l[i]]);
end;
end;
writeln('55555');
end.
type node=record
a,b,time:longint;
end;
var a:array[0..26,0..26] of integer;
q:array[1..625] of node;
d:array[1..4] of integer=(1,0,-1,0);
l:array[1..4] of integer=(0,-1,0,1);
mark:array[0..26,0..26] of boolean;
head,tail,t,x,y,i,j:longint;
k,first,final:node;
st:string;
procedure push(a,b,t:longint);
begin
inc(head);
q[head].a:=a;
q[head].b:=b;
q[head].time:=t;
mark[a,b]:=true;
end;
function pop:node;
begin
pop:=q[tail];
inc(tail);
end;
begin
fillchar(a,sizeof(a),3);
fillchar(mark,sizeof(mark),false);
readln(t);
readln(x,y);
for i:=1 to y do begin
readln(st);
for j:=1 to x do begin
case(st[j]) of
'.':a[i,j]:=1;
'0':a[i,j]:=3;
'#':a[i,j]:=2;
'm':begin
first.a:=i;first.b:=j;
a[i,j]:=1;
end;
's':begin
final.a:=i;final.b:=j;
a[i,j]:=1;
end;
end;
end;
end;
head:=0;tail:=1;
push(first.a,first.b,0);
while head>=tail do begin
k:=pop;
if (k.a=final.a) and(k.b=final.b) then begin
if k.time<t then writeln(k.time)
else writeln(55555);
halt;
end;
if a[k.a,k.b]=2 then begin
a[k.a,k.b]:=1;
push(k.a,k.b,k.time);
end
else begin
for i:=1 to 4 do
if(a[k.a+d[i],k.b+l[i]]<=2) and(not mark[k.a+d[i],k.b+l[i]]) then
push(k.a+d[i],k.b+l[i],k.time+a[k.a+d[i],k.b+l[i]]);
end;
end;
writeln('55555');
end.
浙公网安备 33010602011771号