| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
我是用广度做的,为什么会WA啊?program pku1088;
const max=100;
dt:array[1..4,1..2] of integer=((-1,0),(1,0),(0,-1),(0,1));
var r,c,n,i,j,k,s,x,y:integer;
t,map:array[0..max+1,0..max+1] of integer;
tree:array[1..max*max,1..2] of integer;
function min(x,y:integer):boolean;
var mi:integer;
mb:boolean;
begin
mb:=true;
for mi:=1 to 4 do
mb:=mb and ((map[x,y]<=map[x+dt[mi,1],y+dt[mi,2]])or(t[x+dt[mi,1],y+dt[mi,2]]>0));
min:=mb;
end;
begin
while not seekeof(input) do
begin
fillchar(map,sizeof(map),0);
fillchar(t,sizeof(t),0);
fillchar(tree,sizeof(tree),0);
readln(r,c);
for i:=1 to r do
begin
for j:=1 to c do read(map[i,j]);
readln;
end;
for i:=0 to r+1 do
begin
map[i,0]:=maxint;
map[i,c+1]:=maxint;
end;
for i:=0 to c+1 do
begin
map[0,i]:=maxint;
map[r+1,i]:=maxint;
end;
n:=0;
for i:=1 to r do
for j:=1 to c do
if (map[i,j]<=map[i-1,j])and(map[i,j]<=map[i+1,j])
and(map[i,j]<=map[i,j-1])and(map[i,j]<=map[i,j+1])
then begin
n:=n+1;
tree[n,1]:=i;
tree[n,2]:=j;
t[i,j]:=1;
end;
s:=0;
i:=1;
repeat
x:=tree[i,1];
y:=tree[i,2];
for j:=1 to 4 do
if (0<x+dt[j,1])and(x+dt[j,1]<=r)
and(0<y+dt[j,2])and(y+dt[j,2]<=c)
and(t[x+dt[j,1],y+dt[j,2]]=0)and min(x+dt[j,1],y+dt[j,2])
then begin
n:=n+1;
tree[n,1]:=x+dt[j,1];
tree[n,2]:=y+dt[j,2];
for k:=1 to 4 do
if (map[tree[n,1]+dt[k,1],tree[n,2]+dt[k,2]]<map[tree[n,1],tree[n,2]])
and (t[tree[n,1]+dt[k,1],tree[n,2]+dt[k,2]]+1>t[tree[n,1],tree[n,2]])
then t[tree[n,1],tree[n,2]]:=t[tree[n,1]+dt[k,1],tree[n,2]+dt[k,2]]+1;
if t[tree[n,1],tree[n,2]]>s then s:=t[tree[n,1],tree[n,2]];
end;
i:=i+1;
until i>n;
writeln(s);
end;
end.
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator