http://acm.pku.edu.cn/JudgeOnline/problem?id=1099


Код:
var
s,du,dl:array[0..11,0..11] of integer;
i,j,k,m:integer;
ti:longint;
begin
ti:=0;
repeat
inc(ti);
readln(m);
if m=0 then break;
for i:=1 to m do
begin
for j:=1 to m do
read(s[i,j]);
readln;
end;
fillchar(du,sizeof(du),0);
fillchar(dl,sizeof(dl),0);
for i:=0 to m do
for j:=1 to m do
if s[i,j]=1 then
begin
k:=pred(j);
while (k>=1) do
begin
if s[i,k]<>0 then break;
dl[i,k]:=-1;
dec(k);
end;
k:=succ(j);
while (k<=m) do
begin
if s[i,k]<>0 then break;
dl[i,k]:=1;
inc(k);
end;
k:=pred(i);
while (k>=1) do
begin
if s[k,j]<>0 then break;
du[k,j]:=1;
dec(k);
end;
k:=succ(i);
while (k<=m) do
begin
if s[k,j]<>0 then break;
du[k,j]:=-1;
inc(k);
end;
end
else
if s[i,j]=-1 then
begin
k:=pred(j);
while (k>=1) do
begin
if s[i,k]<>0 then break;
dl[i,k]:=1;
dec(k);
end;
k:=succ(j);
while (k<=m) do
begin
if s[i,k]<>0 then break;
dl[i,k]:=-1;
inc(k);
end;
k:=pred(i);
while (k>=1) do
begin
if s[k,j]<>0 then break;
du[k,j]:=-1;
dec(k);
end;
k:=succ(i);
while (k<=m) do
begin
if s[k,j]<>0 then break;
du[k,j]:=1;
inc(k);
end;
end;
if ti<>1 then writeln;
writeln('Case ',ti,':');
writeln;
for i:=1 to 3+(m shl 2) do
write('*');
writeln;
for i:=1 to m do
begin
if i<>1 then
begin
write('*');
for j:=1 to m do
write(' H ');
writeln(' *');
write('*');
for j:=1 to m do
begin
write(' ');
if (du[i,j]<>1) and (s[i,j]<>1) then write('|') else write(' ');
write(' ');
end;
writeln(' *');
end;
write('*');
for j:=1 to m do
begin
if (dl[i,j]<>1) and (s[i,j]<>-1) then write('H-') else write(' ');
write('O');
if (dl[i,j]<>-1) and (s[i,j]<>-1) then write('-H') else write(' ');
end;
writeln('*');
if i<>m then
begin
write('*');
for j:=1 to m do
begin
write(' ');
if (du[i,j]<>-1) and (s[i,j]<>1) then write('|') else write(' ');
write(' ');
end;
writeln(' *');
end;
end;
for i:=1 to 3+(m shl 2) do
write('*');
writeln;
until false;
end.