AcWing 116. 飞行员兄弟 JAVA
原题链接
简单
作者:
M._3
,
2021-12-17 18:47:39
,
所有人可见
,
阅读 204
import java.util.*;
public class Main
{
static int N=5,a[]=new int [20],b[]=new int [20],ta[]=new int [20],tb[]=new int [20],p,res;
static char g[][]=new char [N][N],backup[][]=new char [N][N];
public static void main(String [] args)
{
Scanner sc=new Scanner(System.in);
for(int i=0;i<4;++i)
{
String t=sc.next();
g[i]=t.toCharArray();
//System.out.println(g[i]);
}
res=20;
for(int op=0;op<(1<<16);++op)
{
for(int i=0;i<4;++i)backup[i]=Arrays.copyOf(g[i], 4);
p=0;
for(int i=0;i<4;++i)
{
for(int j=0;j<4;++j)
{
if(((op>>get(i,j))&1)==1){
a[p]=i;
b[p]=j;
p++;
turn_all(i,j);
}
}
}
boolean flag=false;
for(int i=0;i<4;++i)
{
for(int j=0;j<4;++j)
{
if(g[i][j]=='+')
flag=true;
}
}
if(flag==false)
{
if(p<res)
{
res=p;
ta=Arrays.copyOf(a, p);
tb=Arrays.copyOf(b, p);
}
}
for(int i=0;i<4;++i)g[i]=Arrays.copyOf(backup[i], 4);
}
System.out.println(res);
for(int i=0;i<res;++i)
{
System.out.println((ta[i]+1)+" "+(tb[i]+1));
}
}
static int get(int x, int y)
{
return x * 4 + y;
}
static void turn_one(int x, int y)
{
if (g[x][y] == '+') g[x][y] = '-';
else g[x][y] = '+';
}
static void turn_all(int x, int y)
{
for (int i = 0; i < 4; i ++ )
{
turn_one(x, i);
turn_one(i, y);
}
turn_one(x, y);
}
}