码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • The Pilots Brothers‘ refrigerator高效贪心算法


         Description

    The game “The Pilots Brothers: following the stripy elephant” has a quest where a player needs to open a refrigerator.

    There are 16 handles on the refrigerator door. Every handle can be in one of two states: open or closed. The refrigerator is open only when all handles are open. The handles are represented as a matrix 4х4. You can change the state of a handle in any location [i, j] (1 ≤ i, j ≤ 4). However, this also changes states of all handles in row i and all handles in column j.

    The task is to determine the minimum number of handle switching necessary to open the refrigerator.

    Input

    The input contains four lines. Each of the four lines contains four characters describing the initial state of appropriate handles. A symbol “+” means that the handle is in closed state, whereas the symbol “−” means “open”. At least one of the handles is initially closed.

          Output

    The first line of the input contains N – the minimum number of switching. The rest N lines describe switching sequence. Each of the lines contains a row number and a column number of the matrix separated by one or more spaces. If there are several solutions, you may give any one of them.

          Sample Input

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

    Sample Output

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

    高效贪心算法

    AC代码

     
    
    #include
    #include
    #include
    #include
    
    using namespace std;
    
    int num=0x3f3f3f3f;
    int a[10][10],b[10][10],flag;
    int fanzhuan(int x,int y)
    {
    a[x][y]=!a[x][y];
    for(int i=0; i<4; i++)
    a[x][i]=!a[x][i];
    
    for(int j=0; j<4; j++)
    a[j][y]=!a[j][y];
    }
    int panduan()
    {
    for(int i=0; i<4; i++)
    for(int j=0; j<4; j++)
    if(!a[i][j])
    return 0;
    return 1;
    }
    struct node
    {
    int a,b;
    } p[20];
    void DFS(int x,int y,int ans)//将所有的num步的情况都跑一遍判断是否有符合的
    {
    if(num==ans)
    {
    flag=panduan();
    return ;
    }
    
    if(flag||x>=4||y>=4)
    return ;
    
    int fy=(y+1)%4; //按行移动的
    int fx=x+(y+1)/4;
    
    fanzhuan(x,y);
    DFS(fx,fy,ans+1);
    p[ans].a=x;
    p[ans].b=y;
    fanzhuan(x,y);//原路返回
    DFS(fx,fy,ans);
    
    }
    int main()
    {
    string s[4];
    while(cin>>s[0])
    {
    for(int i=1; i<4; i++)
    cin>>s[i];
    for(int i=0; i<4; i++)
    for(int j=0; j<4; j++)//格式转换
    if(s[i][j]=='+')
    a[i][j]=0;
    else
    a[i][j]=1;
    flag=0;
    for(int i=0; i<=16; i++)//枚举
    {
    num=i;
    DFS(0,0,0);
    if(flag)
    break;
    }
    cout<
                    
  • 相关阅读:
    北京十大律师事务所top10最新排行(权威公布)
    MySQL开启安全审计日志,开启查询日志
    【C++】构造函数初始化列表 ② ( 构造函数 为 初始化列表 传递参数 | 类嵌套情况下 的 构造函数 / 析构函数 执行顺序 )
    springboot实现用户统一认证、管理(单点登录)
    JAVA微服务快速开发平台的功能特点
    java毕业设计旧衣物捐赠系统(附源码、数据库)
    以爱情规律为例,浅谈三段式描述状态机
    ChatGPT 入门指南:与 AI 进行愉快互动的秘诀大揭秘!
    使用python脚本传递参数:(三种方式可收藏)
    本地电脑如何连接使用腾讯云服务器
  • 原文地址:https://blog.csdn.net/m0_71272694/article/details/128181500
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号