const
fx:array[1..4]of longint=(1,0,-1,0);
fy:array[1..4]of longint=(0,1,0,-1);
var
map:array[0..5,0..5]of char;
ans,a,b,c,d:longint;
procedure init;
var
i,j:longint;
sss:char;
begin
for i:=1 to 4 do
for j:=1 to 4 do
begin
read(sss);
while(sss<>'B')and(sss<>'W')and(sss<>'O')do
read(sss);
map[i,j]:=sss;
if sss='O' then
begin
if a=0 then begin a:=i; b:=j;end
else begin c:=i; d:=j;end;
end;
end;
end;
function flag:boolean;
var
i:longint;
begin
for i:=1 to 4 do
begin
if(map[1,i]=map[2,i])and(map[2,i]=map[3,i])and(map[3,i]=map[4,i])then exit(true);
if(map[i,1]=map[i,2])and(map[i,2]=map[i,3])and(map[i,3]=map[i,4])then exit(true);
end;
if(map[1,1]=map[2,2])and(map[2,2]=map[3,3])and(map[3,3]=map[4,4])then exit(true);
if(map[1,4]=map[2,3])and(map[2,3]=map[3,2])and(map[3,2]=map[4,1])then exit(true);
exit(false);
end;
procedure try(now,x,x1,y1,x2,y2:longint);{状态设计得很好}
var
i:longint;
begin
if x>=ans then exit;
if flag then begin ans:=x; exit; end;
if (now and 1)=1 then//hei
begin
for i:=1 to 4 do
ifmap[x1+fx[i],y1+fy[i]]='B' then
begin
map[x1+fx[i],y1+fy[i]]:='O';
map[x1,y1]:='B';
try(1-now,x+1,x1+fx[i],y1+fy[i],x2,y2);{这样设置相当妙}
map[x1+fx[i],y1+fy[i]]:='B';
map[x1,y1]:='O';
end;
for i:=1 to 4 do
ifmap[x2+fx[i],y2+fy[i]]='B' then
begin
map[x2+fx[i],y2+fy[i]]:='O';
map[x2,y2]:='B';
try(1-now,x+1,x1,y1,x2+fx[i],y2+fy[i]);
map[x2+fx[i],y2+fy[i]]:='B';
map[x2,y2]:='O';
end;
end;
if (now and 1)=0 then//bai
begin
for i:=1 to 4 do
ifmap[x1+fx[i],y1+fy[i]]='W' then
begin
map[x1+fx[i],y1+fy[i]]:='O';
map[x1,y1]:='W';
try(1-now,x+1,x1+fx[i],y1+fy[i],x2,y2);
map[x1+fx[i],y1+fy[i]]:='W';
map[x1,y1]:='O';
end;
for i:=1 to 4 do
ifmap[x2+fx[i],y2+fy[i]]='W' then
begin
map[x2+fx[i],y2+fy[i]]:='O';
map[x2,y2]:='W';
try(1-now,x+1,x1,y1,x2+fx[i],y2+fy[i]);
map[x2+fx[i],y2+fy[i]]:='W';
map[x2,y2]:='O';
end;
end;
end;
begin
init;
ans:=5;
try(0,0,a,b,c,d);
try(1,0,a,b,c,d);
write(ans);
end.
1004四子连棋{摘自 兰多夫}
最新推荐文章于 2019-08-30 17:14:30 发布