“飞行员兄弟”这个游戏,需要玩家顺利的打开一个拥有16个把手的冰箱。

已知每个把手可以处于以下两种状态之一:打开或关闭。

只有当所有把手都打开时,冰箱才会打开。

把手可以表示为一个4х4的矩阵,您可以改变任何一个位置[i,j]上把手的状态。

但是,这也会使得第i行和第j列上的所有把手的状态也随着改变。

请你求出打开冰箱所需的切换把手的次数最小值是多少。

输入格式

输入一共包含四行,每行包含四个把手的初始状态。

符号“+”表示把手处于闭合状态,而符号“-”表示把手处于打开状态。

至少一个手柄的初始状态是关闭的。

输出格式

第一行输出一个整数N,表示所需的最小切换把手次数。

接下来N行描述切换顺序,每行输入两个整数,代表被切换状态的把手的行号和列号,数字之间用空格隔开。

注意:如果存在多种打开冰箱的方式,则按照优先级整体从上到下,同行从左到右打开。

数据范围

1≤i,j≤41≤i,j≤4

输入样例:

-+--
----
----
-+--

输出样例:

6
1 1
1 3
1 4
4 1
4 3
4 4

思路:暴力枚举 2 ^16

import java.util.*;
public class Main{static class node{int x,y;node(int x,int y){this.x = x;this.y = y;}}static ArrayList<node> ansL = new ArrayList<>();static int [][]g = new int [6][6];static node[]arr = new node[20];public static void main(String[] args) {Scanner sc = new Scanner(System.in);for(int i = 1;i <= 4;i ++) {String s = sc.next();for(int j = 1;j <= 4;j ++) {if(s.charAt(j-1) == '-') {g[i][j] = 1;}else {g[i][j] = 0;}}}int idx = -1;for(int i = 1;i <= 4;i ++) {for(int j = 1;j <= 4;j ++) {arr[++ idx] = new node(i,j);}}List<node>list = new ArrayList<>();dfs(0,list);System.out.println(ansL.size());for(int i = 0;i < ansL.size();i ++) {int a = ansL.get(i).x;int b = ansL.get(i).y;System.out.println(a + " " + b);}}static void turn(int r,int c) {for(int i = 1;i <= 4;i ++) {g[r][i] ^= 1;g[i][c] ^= 1;}g[r][c] ^= 1;}static boolean is_ok() {for(int i = 1;i <= 4;i ++) {for(int j = 1;j <= 4;j ++) {if(g[i][j] == 0) {return false;}}}return true;}static void check(List<node>list) {int [][]backup = new int [6][6];for(int i = 1;i <= 4;i ++) {for(int j = 1;j <= 4;j ++) {backup[i][j] = g[i][j];}}for(int i = 0;i < list.size();i ++) {int a = list.get(i).x;int b = list.get(i).y;turn(a,b);}if(is_ok()) {ansL = new ArrayList<>(list);}for(int i = 1;i <= 4;i ++) {for(int j = 1;j <= 4;j ++) {g[i][j] = backup[i][j];}}}static void dfs(int idx,List<node>list) {if(idx == 16) {check(list);return;}dfs(idx+1,list);list.add(arr[idx]);dfs(idx+1,list);list.remove(list.size()-1);}
}

飞行员兄弟 JAVA题解相关推荐

  1. 116. 飞行员兄弟 Java题解

    注意:如果存在多种打开冰箱的方式,则按照优先级整体从上到下,同行从左到右打开. 数据范围 1≤i,j≤4 输入样例: -+-- ---- ---- -+-- 输出样例: 6 1 1 1 3 1 4 4 ...

  2. 飞行员兄弟 Java版

    "飞行员兄弟"这个游戏,需要玩家顺利的打开一个拥有16个把手的冰箱. 已知每个把手可以处于以下两种状态之一:打开或关闭.只有当所有把手都打开时,冰箱才会打开.把手可以表示为一个4х ...

  3. Java实现十字形开关问题(“飞行员兄弟“)

    主要通过位运算 "飞行员兄弟"这个游戏,需要玩家顺利的打开一个拥有 16 个把手的冰箱. 已知每个把手可以处于以下两种状态之一:打开或关闭. 只有当所有把手都打开时,冰箱才会打开. ...

  4. AcWing 116. 飞行员兄弟(二维指数型枚举)

    116. 飞行员兄弟 思路: 通过二进制串暴力枚举所有操作情况 从左上到右下扫描二进制串 (当一个答案存在多种操作情况时保证优先级整体从上到下,同行从左到右打开) 把每次的操作坐标存放到ArrayLi ...

  5. Acwing---116.飞行员兄弟

    飞行员兄弟 1.题目 2.基本思想 3.代码实现 1.题目 "飞行员兄弟"这个游戏,需要玩家顺利的打开一个拥有 16 个把手的冰箱. 已知每个把手可以处于以下两种状态之一:打开或关 ...

  6. java变量中不属于复合类型的数据类型是_2006新版JAVA题解(JAVA简单数据类型)...

    2006新版JAVA题解(JAVA简单数据类型) 2007年1月22日来源:233网校网校课程 在线题库评论 分享到 1.下列哪一个是合法的标识符: A.12class; B.+viod; C.-5; ...

  7. 2020第五届上海第二工业大学新生程序设计竞赛(Java题解)

    2020第五届上海第二工业大学新生程序设计竞赛(Java题解) 作为C/C++版本的补充题解,仅供参考 需要解析的可以看这篇: 2020第五届上海第二工业大学新生程序设计竞赛 用Java语言参加竞赛时 ...

  8. 笔试编程题 拼凑正方形 Java题解 牛牛有4根木棍,长度分别为a,b,c,d。羊羊家提供改变木棍长度的服务,如果牛牛支付一个硬币就可以让一根木棍的长度加一或者减一。牛牛需要用这四根木棍拼凑一个正方

    题目描述 牛牛有4根木棍,长度分别为a,b,c,d.羊羊家提供改变木棍长度的服务,如果牛牛支付一个硬币就可以让一根木棍的长度加一或者减一.牛牛需要用这四根木棍拼凑一个正方形出来,牛牛最少需要支付多少硬 ...

  9. p3371 单源最短路径(弱化版)-java题解-最短路

    弱化版传送门: P3371 [模板]单源最短路径(弱化版) - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 题目背景 本题测试数据为随机数据,在考试中可能会出现构造数据让SPFA不通 ...

最新文章

  1. 一个对称性解释三个宇宙学难题;引力波碰撞会发光?粘液霉菌助力寻找宇宙网 | 一周科技速览...
  2. appium+tidevice实现iOS自动化测试(Mac)
  3. 体系化认识RPC--转
  4. 分享:Android程序员,必备精品网站大汇总
  5. 奇安信cdn配置教程_PicGo+jsDelivr+GitHub搭建免费cdn加速的图床
  6. 大数据常见组件的访问页面总结
  7. python 多继承的问题
  8. Java进阶07 嵌套类
  9. GUI Design Studio 4 5 151 0原型设计工具的使用
  10. 统计表达式二叉树操作数个数
  11. XXE漏洞 解决方案(JAVA版本)
  12. 阿里巴巴java方向笔试题 带详细答案
  13. Word 2019 插入参考文献
  14. mac bookpro m1 笔记本关闭键盘屏幕 禁用键盘屏幕使用 键盘屏幕误触 Touch Bar禁用 禁用MacBook-Pro的触摸栏
  15. 计算机只报数字怎么调成音乐,电脑怎么设置一锁屏音乐就停?
  16. c语言打包游戏补丁,C语言实现的系统补丁自动安装工具.doc
  17. EventBus实现原理
  18. 安全刻不容缓「GitHub 热点速览 v.21.50」
  19. 24.多线程(等待唤醒机制,volatile,CAS 算法,线程池,定时器,设计模式)
  20. linux+nas+私有云软件,自建家庭私有云NAS——磁盘管理系统

热门文章

  1. Python_FontTools使用
  2. BGP/MPLS VS VPLS
  3. C#计算两个日期间隔年数、月数、天数
  4. 【项目经验】最新最全ElasticSearch操作详解
  5. ubuntu conf误删除的问题
  6. Java JNI初体验
  7. 机械键盘指南!告别码字疲劳!
  8. Linux详细安装教程(Centos)
  9. 使用AFNetWorking请求错误
  10. C语言 if语句详解