1004四子连棋{摘自 兰多夫}

来源:互联网 发布:发烧碟推荐知乎 编辑:程序博客网 时间:2024/06/18 05:44
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.