【备战NOIP2012图论专项模拟试题】
题解
DP,最多运行n+m得出结果。
代码
var
s,f:array[0..200,0..200]of longint;
n,m,i,j,k,x,y:longint;
function min(a,b:longint):longint;
begin
if a>b then exit(b)
else exit(a);
end;
var
z:string;
begin
readln(n,m);
fillchar(f,sizeof(f),$7f);
for i:=1 to n do
begin
readln(z);
for j:=1 to m do
begin
val(z[j],s[i,j]);
if s[i,j]=1 then f[i,j]:=0;
end;
end;
for k:=1 to m+n do
for i:=1 to n do
for j:=1 to m do
begin
y:=min(f[i+1,j]+1,f[i-1,j]+1);
x:=min(f[i,j+1]+1,f[i,j-1]+1);
x:=min(x,y);
f[i,j]:=min(f[i,j],x);
end;
for i:=1 to n do
begin
for j:=1 to m do write(f[i,j],' ');
writeln;
end;
end.