Description
请你帮忙设计一个从城市M到城市Z的输油管道,现在已经把整个区域划分为R行C列,每个单元格可能是空的也可能是以下7种基本管道之一:
油从城市M流向Z,‘+’型管道比较特殊,因为石油必须在两个方向(垂直和水平)上传输,如下图所示:
现在恐怖分子弄到了输油管道的设计图,并把其中一个单元格中的管道偷走了,请你帮忙找到偷走的管道的位置以及形状。
Input
第一行包含两个整数R和C(1<=R,C<=25)。
接下来R行每行C个字符描述被偷之后的形状,字符分为以下三种:
(1)‘.’表示空;
(2)字符‘|’(ASCII为124)、‘-’、‘+’、‘1’、‘2’、‘3’、‘4’描述管道的形状;
(3)‘M’和‘Z’表示城市,两个都是只出现一次。
输入保证石油的流向是唯一的,只有一个管道跟M和Z相连,除此此外,保证没有多余的管道,也就是说所有的管道在加进被偷的管道后一定都会被用上。
输入保证有解而且是唯一的。
Output
输出被偷走的管道的行号和列号以及管道的类型。
分析
第一眼看上去很难,但是水花四溢
因为r和c很小,所以怎么乱搞都行
枚举所有空地,分不同情况判断当前位置是否要放,放什么就行了
code
var
n,m:longint;
a:array[0..26,0..26]of char;
procedure main;
var
i,j:longint;
begin
for i:=1 to n do
for j:=1 to m do
if a[i,j]='.' then
begin
if ((a[i-1,j]='|')or(a[i-1,j]='1')or(a[i-1,j]='4')or(a[i-1,j]='+'))
and((a[i+1,j]='|')or(a[i+1,j]='2')or(a[i+1,j]='3')or(a[i+1,j]='+'))
and((a[i,j-1]='-')or(a[i,j-1]='1')or(a[i,j-1]='2')or(a[i,j-1]='+'))
and((a[i,j+1]='-')or(a[i,j+1]='3')or(a[i,j+1]='4')or(a[i,j+1]='+')) then
begin
writeln(i,' ',j,' +');
halt;
end;
if ((a[i,j-1]='-')or(a[i,j-1]='+')or(a[i,j-1]='1')or(a[i,j-1]='2'))
and((a[i,j+1]='-')or(a[i,j+1]='+')or(a[i,j+1]='4')or(a[i,j+1]='3')) then
begin
writeln(i,' ',j,' -');
halt;
end;
if ((a[i-1,j]='|')or(a[i-1,j]='+')or(a[i-1,j]='1')or(a[i-1,j]='4'))
and((a[i+1,j]='|')or(a[i+1,j]='+')or(a[i+1,j]='2')or(a[i+1,j]='3')) then
begin
writeln(i,' ',j,' |');
halt;
end;
if ((a[i+1,j]='|')or(a[i+1,j]='+')or(a[i+1,j]='2')or(a[i+1,j]='3'))
and((a[i,j+1]='-')or(a[i,j+1]='+')or(a[i,j+1]='3')or(a[i,j+1]='4')) then
begin
writeln(i,' ',j,' 1');
halt;
end;
if ((a[i-1,j]='|')or(a[i-1,j]='+')or(a[i-1,j]='1')or(a[i-1,j]='4'))
and((a[i,j+1]='-')or(a[i,j+1]='+')or(a[i,j+1]='3')or(a[i,j+1]='4')) then
begin
writeln(i,' ',j,' 2');
halt;
end;
if ((a[i,j-1]='-')or(a[i,j-1]='+')or(a[i,j-1]='1')or(a[i,j-1]='2'))
and((a[i-1,j]='|')or(a[i-1,j]='+')or(a[i-1,j]='1')or(a[i-1,j]='4')) then
begin
writeln(i,' ',j,' 3');
halt;
end;
if ((a[i,j-1]='-')or(a[i,j-1]='+')or(a[i,j-1]='2')or(a[i,j-1]='1'))
and((a[i+1,j]='|')or(a[i+1,j]='+')or(a[i+1,j]='3')or(a[i+1,j]='2')) then
begin
writeln(i,' ',j,' 4');
halt;
end;
end;
end;
procedure init;
var
i,j:Longint;
s:string;
begin
readln(n,m);
for i:=1 to n do
begin
for j:=1 to m do
read(a[i,j]);
readln;
end;
end;
begin
init;
main;
end.